diff --git a/.github/typos.toml b/.github/typos.toml new file mode 100644 index 0000000..598f960 --- /dev/null +++ b/.github/typos.toml @@ -0,0 +1,16 @@ +[default.extend-identifiers] +# False positives. +mis = "mis" +MIS = "MIS" +inout = "inout" +BARs = "BARs" + +[type.po] +# Localized content should not be checked for typos. English +# in these files should be validated manually. +extend-glob = ["*.po"] +check-file = false + +[files] +# Typos in third party packages should be fixed upstream. +extend-exclude = ["theme/*", "tools/*"] diff --git a/.github/workflows/build.sh b/.github/workflows/build.sh new file mode 100644 index 0000000..f8598eb --- /dev/null +++ b/.github/workflows/build.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +# Usage: build.sh +# +# Build the docs as of the date specified specified in the +# POT-Creation-Date header of po/$book_lang.po. The output can be +# found in $dest_dir. +# +# The src/ directory are left in a dirty state so +# you can run `mdbook test` and other commands afterwards. + +book_lang=${1:?"Usage: $0 "} +dest_dir=${2:?"Usage: $0 "} + +if [ "$book_lang" = "en" ]; then + echo "::group::Building English docs" +else + pot_creation_date=$(grep --max-count 1 '^"POT-Creation-Date:' "po/$book_lang.po" | sed -E 's/".*: (.*)\\n"/\1/') + pot_creation_date=${pot_creation_date:-now} + echo "::group::Building $book_lang translation as of $pot_creation_date" + + # Set language and adjust site URL. Clear the redirects since they are + # in sync with the source files, not the translation. + export MDBOOK_BOOK__LANGUAGE=$book_lang + export MDBOOK_OUTPUT__HTML__SITE_URL=/ankidroiddocs/$book_lang/ + export MDBOOK_OUTPUT__HTML__REDIRECT='{}' +fi + +mdbook build -d "$dest_dir" + +echo "::endgroup::" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..f34620a --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,102 @@ +name: Test + +on: + pull_request: + push: + branches: + - main + +env: + CARGO_TERM_COLOR: always + +jobs: + format: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install formatting dependencies + run: | + sudo apt update + sudo apt install gettext yapf3 + + - name: Check formatting + uses: dprint/check@v2.2 + + typos: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Check for typos + uses: crate-ci/typos@v1.17.2 + with: + config: ./.github/typos.toml + + find-languages: + runs-on: ubuntu-latest + outputs: + languages: ${{ steps.find-languages.outputs.languages }} + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Find languages + id: find-languages + shell: python + run: | + import os, json, pathlib + languages = ["en"] + [p.stem for p in pathlib.Path("po").iterdir() if p.suffix == ".po"] + github_output = open(os.environ["GITHUB_OUTPUT"], "a") + github_output.write("languages=") + json.dump(sorted(languages), github_output) + + build: + runs-on: ubuntu-latest + needs: + - find-languages + strategy: + matrix: + language: ${{ fromJSON(needs.find-languages.outputs.languages) }} + fail-fast: false + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 # We need the full history for build.sh below. + + - name: Setup Rust cache + uses: ./.github/workflows/setup-rust-cache + + - name: Install Gettext + run: | + sudo apt update + sudo apt install gettext + + - name: Install mdbook + uses: ./.github/workflows/install-mdbook + + - name: Test format of ${{ matrix.language }} translation + if: matrix.language != 'en' + run: msgfmt --statistics -o /dev/null po/${{ matrix.language }}.po + + - name: Test extracting English strings + if: matrix.language == 'en' + run: | + MDBOOK_OUTPUT='{"xgettext": {"pot-file": "messages.pot"}}' mdbook build -d po + msgfmt -o /dev/null --statistics po/messages.pot + + - name: Build ${{ matrix.language }} translation + run: | + chmod +x .github/workflows/build.sh + .github/workflows/build.sh ${{ matrix.language }} book/ankidroiddocs-${{ matrix.language }} + + # Upload the book now to retain it in case mdbook test fails. + - name: Upload book + uses: actions/upload-artifact@v4 + with: + name: ankidroiddocs-${{ matrix.language }} + path: book/ + diff --git a/.github/workflows/check-msgid-changes.py b/.github/workflows/check-msgid-changes.py new file mode 100644 index 0000000..5c8c8b2 --- /dev/null +++ b/.github/workflows/check-msgid-changes.py @@ -0,0 +1,89 @@ +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Find changed msgid fields without a change in POT-Creation-Date. + +When following the instructions in +https://github.com/google/comprehensive-rust/blob/main/TRANSLATIONS.md, +one of two things should happen: + +- The `msgid` fields change because `msgmerge --update` was used. This + will also update the POT-Creation-Date field since a new timestamp + is merged in from the messages.pot file. + +- Translations are added or updated. This should not change the + `msgid` fields: only the `msgstr` fields should change. If the PO + editor being used inadvertently changes the wrapping of both `msgid` + and `msgstr` fields, then `dprint fmt` can be used to normalize them + all. + +The code here detects if both of these happen at the same time: if one +or more `msgid` fields changed without a corresponding change to the +POT-Creation-Date field. If this happens, the translator should fix it +by running: + + dprint fmt + +Commit and push to the branch again. +""" + +import os + +# TODO: move the `git reset` from the action code to here. Infact, we +# should be able to determine this with read-only operations. + +# TODO: use Git plumbing commands instead of porcelain, see +# https://mirrors.edge.kernel.org/pub/software/scm/git/docs/git.html. +for filename in os.popen("git diff --name-only").read().split(): + if not filename.endswith(".po"): + continue + + # If POT-Creation-Date has changed, then we assume that the commit + # is the result of `msgmerge --update`. It is expected that the + # `msgid` fields change when `msgmerge` is run, so there is + # nothing to check. + if "POT-Creation-Date" in os.popen( + f"git diff --unified=0 {filename}").read(): + print( + f"Assuming {filename} was changed automatically, skipping msgid check" + ) + continue + + changed_lines = { + i + 1 + for i, line in enumerate( + os.popen(f"git blame {filename}").readlines()) + if line.startswith("00000000") + } + + # Look for a changed line between `msgid` and `msgstr`. + saw_msgid = False + with open(filename, "r") as f: + line = f.readline() + line_number = 1 + + while line: + if line.startswith("msgid"): + saw_msgid = True + elif line.startswith("msgstr"): + saw_msgid = False + + if saw_msgid and line_number in changed_lines: + print(f"Changed msgid in file {filename}:{line_number}!") + print( + "Please read https://github.com/google/comprehensive-rust/blob/main/TRANSLATIONS.md#creating-and-updating-translations." + ) + exit(1) + + line_number += 1 + line = f.readline() diff --git a/.github/workflows/check-msgid-changes.yml b/.github/workflows/check-msgid-changes.yml new file mode 100644 index 0000000..0ec63ca --- /dev/null +++ b/.github/workflows/check-msgid-changes.yml @@ -0,0 +1,21 @@ +name: Prevent unintended msgid changes + +on: + pull_request: + paths: + - "po/*.po" + +jobs: + check-msgid-changes: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Reset git + run: git reset origin/main + + - name: Check po file changes + run: python3 .github/workflows/check-msgid-changes.py diff --git a/.github/workflows/install-mdbook/action.yml b/.github/workflows/install-mdbook/action.yml new file mode 100644 index 0000000..b81ac10 --- /dev/null +++ b/.github/workflows/install-mdbook/action.yml @@ -0,0 +1,23 @@ +name: Install mdbook and dependencies + +description: Install mdbook with the dependencies we need. + +runs: + using: composite + steps: + # The --locked flag is important for reproducible builds. + - name: Install mdbook + run: cargo install mdbook --locked --version 0.4.36 + shell: bash + + - name: Install mdbook-i18n-helpers + run: cargo install mdbook-i18n-helpers --locked --version 0.3.1 + shell: bash + + - name: Install mdbook-toc + run: cargo install mdbook-toc --locked --version 0.14.2 + shell: bash + + - name: Install mdbook-linkcheck + run: cargo install mdbook-linkcheck --locked --version 0.7.7 + shell: bash diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index b52c1b1..05956ad 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,52 +1,65 @@ name: Publish on: - workflow_dispatch: push: branches: - - "main" + - main + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +# Allow one concurrent deployment +concurrency: + group: pages + cancel-in-progress: true + +env: + CARGO_TERM_COLOR: always + # Update the language picker in index.hbs to link new languages. + LANGUAGES: ar ja ru zh-CN jobs: - main: - name: "Publish docs.ankidroid.org" - if: github.repository == 'ankidroid/ankidroiddocs' + publish: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} runs-on: ubuntu-latest steps: - - name: SSH key setup - uses: webfactory/ssh-agent@v0.8.0 + - name: Checkout + uses: actions/checkout@v4 with: - ssh-private-key: ${{ secrets.DOCS_SSH_PRIVATE_KEY }} + fetch-depth: 0 # We need the full history for build.sh below. - - name: SSH server key setup - run: | - ssh-keyscan ankidroid.org >> ~/.ssh/known_hosts - shell: bash + - name: Setup Rust cache + uses: ./.github/workflows/setup-rust-cache - - name: Git Checkout - uses: actions/checkout@v3 + - name: Install mdbook + uses: ./.github/workflows/install-mdbook - - name: Prepare website directory - run: | - mkdir _site - cp -r img _site/ - cp icons/* _site/ + - name: Make executable + run: chmod +x .github/workflows/build.sh + + - name: Build course in English + run: .github/workflows/build.sh en book - - name: Install Asciidoctor + - name: Build all translations run: | - sudo chown -R $USER /var/lib/gems/ - sudo chown -R $USER /usr/local/bin - gem install asciidoctor - shell: bash - - - name: Render Docs - run: asciidoctor ./*.asc -D _site/ - - - name: Copy Docs to ankidroid.org - run: scp -r _site/* ankidroid@ankidroid.org:/usr/share/nginx/html/ - shell: bash - - - name: Restart nginx web server - # - why? nginx used to fail periodically requiring a restart. But who has access? How to restart? - # This alloww people with publish access a button-push way to force a restart if necessary, - # and the restart is quick enough that doing it on publish is fine. - run: ssh ankidroid@ankidroid.org /usr/bin/sudo /usr/sbin/service nginx restart + for po_lang in ${{ env.LANGUAGES }}; do + .github/workflows/build.sh $po_lang book/$po_lang + mv book/$po_lang/html book/html/$po_lang + done + + - name: Setup Pages + uses: actions/configure-pages@v4 + + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: book/html + + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/render_docs.yml b/.github/workflows/render_docs.yml deleted file mode 100644 index 718c44c..0000000 --- a/.github/workflows/render_docs.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: Render Docs - -on: - workflow_dispatch: - pull_request: - push: - -jobs: - render_docs: - name: 'Render Docs' - runs-on: ubuntu-latest - steps: - - name: Git Checkout - uses: actions/checkout@v3 - - - name: Install Asciidoctor - run: | - sudo chown -R $USER /var/lib/gems/ - sudo chown -R $USER /usr/local/bin - gem install asciidoctor - shell: bash - - - name: Render Docs - run: asciidoctor ./*.asc - - - name: Publish Rendered Site As Artifact - uses: actions/upload-artifact@v3 - with: - name: docs.ankidroid.org - path: ./ diff --git a/.github/workflows/setup-rust-cache/action.yml b/.github/workflows/setup-rust-cache/action.yml new file mode 100644 index 0000000..f359ed3 --- /dev/null +++ b/.github/workflows/setup-rust-cache/action.yml @@ -0,0 +1,9 @@ +name: Setup Rust cache + +description: Configure the rust-cache workflow. + +runs: + using: composite + steps: + - name: Setup Rust cache + uses: Swatinem/rust-cache@v2 diff --git a/.github/workflows/sync_translations.yml b/.github/workflows/sync_translations.yml new file mode 100644 index 0000000..76e654e --- /dev/null +++ b/.github/workflows/sync_translations.yml @@ -0,0 +1,127 @@ +name: Sync Translations + +on: + workflow_dispatch: + +permissions: + contents: read + +jobs: + sync_translations: + permissions: + contents: write # for Git to git push + pull-requests: write # to create the PR with changes + name: 'Sync Translations with Crowdin' + timeout-minutes: 20 + runs-on: macos-latest + steps: + - uses: actions/checkout@v4 + with: + ref: 'main' + fetch-depth: 0 + + - name: Credential Prep + run: | + echo "CROWDIN_APIv2_PAT=${{ secrets.CROWDIN_APIv2_PAT }}" >> $GITHUB_ENV + shell: bash + + - name: GIT Setup + run: | + git config --global user.name 'AnkiDroid Translations' + git config --global user.email 'ankidroid@ankidroid.org' + git checkout -b i18n_sync + git reset --hard origin/main + shell: bash + + - uses: actions/setup-node@v4 + with: + node-version: 18 + + - name: Setup Rust cache + uses: ./.github/workflows/setup-rust-cache + + - name: Install mdbook + uses: ./.github/workflows/install-mdbook + + - name: Make executable + run: chmod +x .github/workflows/build.sh + + - name: Generate messages.pot for uploading to crowdin + run: | + MDBOOK_OUTPUT='{"xgettext": {"pot-file": "messages.pot", "granularity": 0}}' mdbook build -d po + + - name: Install dependencies and build + run: | + cd ./tools/localization + yarn + yarn build + + - name: Push translation sources to crowdin + run: | + cd ./tools/localization + yarn start upload + + - name: Pull translation updates from crowdin + run: | + cd ./tools/localization + yarn start download + + - name: Extract downloaded ankidroiddocs.zip file + run: | + cd ./tools/localization + yarn start extract + + - name: Update translation to ankidroiddocs po + run: | + cd ./tools/localization + yarn start update + + - name: Commit changes + run: | + git add po + git commit -am 'Updated strings from Crowdin' + git push --set-upstream origin +i18n_sync + echo "The results of the sync are on the i18n_sync branch, PR them from there for merge." + echo "https://github.com/ankidroid/ankidroiddocs/compare/i18n_sync?expand=1" + + - name: Check if there are strings changes + id: tr_check + run: | + git checkout i18n_sync + COMMITS_COUNT=`git rev-list --count HEAD ^main` + if [ "$COMMITS_COUNT" -gt 0 ]; then + echo "HAS_CHANGES=true" >> $GITHUB_OUTPUT + else + echo "HAS_CHANGES=false" >> $GITHUB_OUTPUT + fi + + - name: Create PR for strings changes if needed + if: ${{ steps.tr_check.outputs.HAS_CHANGES }} + uses: actions/github-script@v7 + with: + script: | + const now = new Date(); + // Date format used: YYYY/MM/DD HH:MM , UTC time(ex: 2023/01/13 08:38) + const formattedDate = + now.getUTCFullYear() + "/" + + ("0" + (now.getUTCMonth() + 1)).slice(-2) + "/" + + ("0" + now.getUTCDate()).slice(-2) + " " + + ("0" + now.getUTCHours()).slice(-2) + ":" + + ("0" + now.getUTCMinutes()).slice(-2); + try { + github.rest.pulls.create({ + owner: context.repo.owner, + repo: context.repo.repo, + title: "Updated strings from Crowdin " + formattedDate, + head: "i18n_sync", + base: "main", + body: "Contains the newest strings changes from Crowdin.", + maintainer_can_modify: true + }); + } catch(err) { + if (err.status === 422) { + console.log("A PR containing translations sync already exists!"); + } else { + throw err; + } + } \ No newline at end of file diff --git a/.gitignore b/.gitignore index 889bfea..7b08049 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,18 @@ -tools/id_rsa -*.html -*~ +# Build artifacts +/book/ +target/ +*.bin -# KDE directory preferences -.directory +# Translation artifacts +po/messages.pot +po/*.mo +po/*.po~ -# Linux trash folder which might appear on any partition or disk -.Trash-* +# macOS artifacts +.DS_Store + +# Jetbrains IDEs project files +.idea/ +.iml +.iws +count.dat diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..f28aaef --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,4 @@ +[workspace] +# Please keep the workspace members sorted. +members = [] +resolver = "2" diff --git a/README.md b/README.md deleted file mode 100644 index 562c27f..0000000 --- a/README.md +++ /dev/null @@ -1,35 +0,0 @@ -ankidroiddocs -============= -Source files for the documentation on the AnkiDroid website ankidroid.org. - -* manual.asc → [manual.html](https://ankidroid.org/docs/manual.html) -* help.asc → [help.html](https://ankidroid.org/docs/help.html) -* changelog.asc → [changelog.html](https://ankidroid.org/docs/changelog.html) - -# Preview - -Pull requests generate the HTML manual as an artifact which can be viewed on the [GitHub Actions](https://github.com/ankidroid/ankidroiddocs/actions) page. - -# Compilation -The documentation on this site is written in the Asciidoc syntax, and should be compiled with [Asciidoctor](http://asciidoctor.org/docs/install-toolchain/) - -## Install Asciidoctor -On Ubuntu you should be able to install with apt: `sudo apt-get install asciidoctor` - -On Windows try the following: - * [Install Ruby](https://www.ruby-lang.org/en/installation/) - * Open command prompt with Ruby - * Enter the command `gem install asciidoctor` - -## Compile the .asc source files - * Open terminal or command prompt with Ruby - * Enter the command `asciidoctor FULL_PATH_TO_SOURCE_FILE` - * A file will be generated with the same name as the source file, but with `.html` extension. - -# Contributing translations and corrections - -The preferred method of contributing to the documentation is to fork the `ankidroiddocs` project on github, and send a pull request with your additions in the usual way. However, if you don't know how to use github, you can simply download the "manual.asc" file and send it to a project member or the Google Group. - -To create a translation of the manual, please make a copy of "manual.asc" and add "-LANUGAGE\_CODE" ([list of ISO\_639-1 language codes](http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)). For example for Italian submit a translated file called "manual-it.asc" based on the original source file. - -Translations should be periodically updated to reflect any changes in the original manual. Details of all changes can be found in the [list of commits](https://github.com/ankidroid/ankidroiddocs/commits/main/). diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..db50d67 --- /dev/null +++ b/Readme.md @@ -0,0 +1,103 @@ +# ankidroiddocs + +The docs is built using a few tools: + +``` +mdbook +mdbook-toc +mdbook-linkcheck +mdbook-i18n-helpers +``` + +First install Rust by following the instructions on https://rustup.rs/. Then clone this repository: + +``` +git clone https://github.com/ankidroid/ankidroiddocs.git +cd ankidroiddocs +``` + +Then install these tools with: + +``` +cargo install mdbook +cargo install mdbook-toc +cargo install mdbook-linkcheck +cargo install mdbook-i18n-helpers +``` + +Run + +``` +mdbook serve +``` + +to start a web server with the course. You'll find the content on `http://localhost:3000`. You can use mdbook build to create a static version of the course in the book/ directory. To build any of the translated versions of the course, run + +``` +MDBOOK_BOOK__LANGUAGE=xx mdbook build -d book/xx +``` + +where xx is the ISO 639 language code (e.g. ja for the Japanese translation). + +# Translations of AnkiDroid Docs + +We use `crowdin.com` for AnkiDroid docs. + +## AnkiDroid docs translations on Crowdin: + +Translating is easy and fun: + +- Go to http://crowdin.net/project/ankidroiddocs +- Register, if you don't have an account yet +- Click on the flag of your language +- Click on a file (they are sorted by descending priority) +- Click on "Sort" +- Click on "Missing translation" +- Grey bullet=missing, Green bullet=done +- For each grey bullet, translate the English text to your language. + +## Add new language entry if not exists + +1. Contact AnkiDroid Org admin to add new language entry on Crowdin +2. Clone this repository +3. Open [theme/head.hbs](theme/head.hbs) file in text editor +4. Add language entry in head.hbs, for e.g. "ja": "日本語" + +```html + +``` + +5. Commit changes and create pull request to ankidroiddocs +6. Update translations on Crowdin + +### Building a Translation + +To use the `po/xx.po` file for your output, run the following command: + +```shell +MDBOOK_BOOK__LANGUAGE=xx mdbook build -d book/xx +``` + +This will update the book's language to `xx`, it will make the `mdbook-gettext` +preprocessor become active and tell it to use the `po/xx.po` file, and finally +it will redirect the output to `book/xx`. + +### Serving a Translation + +Like normal, you can use `mdbook serve` to view your translation as you work on +it. You use the same command as with `mdbook build` above: + +```shell +MDBOOK_BOOK__LANGUAGE=xx mdbook serve -d book/xx +``` + +When you update the `po/xx.po` file, the translated book will automatically +reload. diff --git a/book.toml b/book.toml new file mode 100644 index 0000000..36501b4 --- /dev/null +++ b/book.toml @@ -0,0 +1,51 @@ +[book] +authors = ["AnkiDroid Open Source Team"] +language = "en" +multilingual = false +src = "src" +title = "AnkiDroid Manual" + +[rust] +edition = "2021" + +[build] +extra-watch-dirs = ["po"] + +[preprocessor.gettext] +after = ["links"] + +[output.html] +curly-quotes = true +cname = "docs.ankidroid.org" +additional-css = [ + "theme/css/kbd.css", + "theme/css/language-picker.css", + "theme/css/rtl.css", +] +site-url = "/ankidroiddocs/" +git-repository-url = "https://github.com/ankidroid/ankidroiddocs/" +edit-url-template = "https://github.com/ankidroid/ankidroiddocs/edit/main/{path}" + +[preprocessor.toc] +command = "mdbook-toc" +renderer = ["html"] + +[output.linkcheck] +optional = true +warning-policy = "warn" +follow-web-links = true +exclude = [ + 'microsoft.com', + 'twitter.com', + 'stackexchange.com', + 'https://github.com/open-spaced-repetition/fsrs4anki#add-on-compatibility', + 'support.google.com', + 'reddit.com', +] + +[output.html.fold] +enable = true +level = 0 + +[output.html.search] +use-boolean-and = true diff --git a/changelog.asc b/changelog.asc deleted file mode 100644 index c0ed991..0000000 --- a/changelog.asc +++ /dev/null @@ -1,940 +0,0 @@ -:docinfo1: -:sectanchors: -= AnkiDroid Changelog - -== Version 2.16.5 (20230906) -* Fix potential crash in our crash report system. See: Murphy's Law -* Fix incorrect default setting for analytics opt-in. Should be default off. -** Please check your setting if you want to make sure it is off -** Note1: our analytics is always anonymized and never shared as a first step -** Note2: the backend has been disabled for months, so there should be no exposure -** Still this was in error and counter to our strict opt-in ethos. We are deeply sorry. -** We will issue a future update shortly to opt everyone out as a precaution -* Thanks again for your patience waiting for 2.16 - we're on to 2.17 work already! -* We are humbled by the https://opencollective.com/ankidroid[donations] 🤯 - -== Version 2.16.4 (20230827) -* Your dev team is still very excited to be able to release quick fixes for you again! -* Last big stability release for 2.16 series (see below for main 2.16 info) -* https://opencollective.com/ankidroid[❤️ We continue to be very thankful for your support] -* Improved shortcut icons -* Fix card browser scroll position after editing a card -* Improve shared deck download handling -* Fix sound replay on cards -* Fix deck rebuild not updating UI -* Synced with https://crowdin.com/project/ankidroid[community language translations] -* Development for 2.17 is already in progress! -* Are you still reading this? Good luck in your studies 🤓 - -== Version 2.16.3 (20230818) -* We meet Play Store requirements again, so we can release fixes quickly again! -* This is a stability release for the just-released 2.16 series (see below for 2.16 info) -* https://opencollective.com/ankidroid[🤜🤛 Thank you! Your support makes the fixes happen!] -* Fix crash in certain cases adding images -* Fix crash exporting decks with '/' in deck name -* Fix crash displaying whiteboard menu -* Fix crash opening preferences after storage migration -* Remove camera permission (not needed for single photo use) -* Fix sync required indicator not disappearing -* Fix keyboard card answer highlighting whole card -* Fix keyboard card answer causing double-tap -* Fix incorrect deck highlight in tablet mode -* Fix display of saved card searches -* Fix inconsistent italics between Anki / AnkiDroid -* Add ability to map "reschedule" to a gesture -* Allow long preference titles to wrap -* Allow 3rd party cookies in webview to match Anki behavior -* Improve add shortcut icon -* Remove beolingus pronounce feature -* New community-provided translations from https://crowdin.com/project/ankidroid - -== Version 2.16.2 (20230726) -* You waited patiently nearly 3 years for this release! ⌛ Thank you -* What an effort! v2.16 contains 2,693 changes from 143 different authors 🤯 -* AnkiDroid is a labor of ❤️ with a mission to help the whole world learn more -* https://opencollective.com/ankidroid[you can ❤️ us back so we have more time to work on it] -* “Why It Took So Long”: Scoped Storage replaces sdcard Storage -** Faster syncing and importing -** AnkiDroid no longer needs permission to access “All Files”! -** ...But you lose access to data on uninstall -** Sync, export/import, check media/database disabled during migration -** Manage Space Activity in System Settings -** Added “Backup Reminder” prompt -** https://github.com/ankidroid/Anki-Android/wiki/Storage-Migration-FAQ[More info in our FAQ] -* A huge number of crash fixes, too many to mention -* “Auto” Day/Night theming to follow system, Android 13+ themed icon -* Added Anki “New Anki Backend option in advanced settings" - will be default in 2.17 -** We include anki 2.1.61 now, we’re fully up to date! -** Stats Heatmap -** Scheduler v3 support -** CSV Import, Text import -** Card Browser Searches -** Card Info and Deck Options from upstream -* New gesture manager, supports gamepad and bluetooth keyboard -* Translations, new languages, lots of fixes, https://crowdin.com/project/ankidroid/[you can help!] -* Add support for hierarchical tags -* New Onboarding Screen -* New Preferences -** Icons & Better Categories -** Increase max possible backups to 99 -** Full screen navigation drawer option -** Add Preference for double-tap time interval -** “Insert Field” in Card Template Editor option -** Add "Allow sync on metered connections" option -** New “About” section -** “Developer Options” is now available -* Flags added: Pink, turquoise & purple flags as in Desktop -* Drawing Activity -* Custom Sync Server improvements -** Updated to match new Anki Desktop built-in sync server abilities -** Cleartext traffic permitted (it’s your server, use it how you like) -* Javascript AP changes: -** New bury & suspend card or note API -** New search API -** New text to speech API -** Enhanced reschedule API -** New Reset progress API -** Enable DOM storage so localStorage works -* Use language defined in ‘Language Hint’ when typing the answer -* Mathjax updated to current versions -* Double-tap floating ‘+’ Deck Picker button to add note -* Note Editor SVG, video, clipboard paste import support -* Card Previewer progress bar during preview -* Card Previewer: Show type-in answer in card previews -* Card Browser Support for Indeterminate tags when adding/removing tags -* Sync Account Add “Forgot Email” Button -* Add option to show all deck stats by default -* Add Note Gesture -* Ask to keep data when uninstalling (saves preferences too) -* Reviewer: Allow “TTS” to be moved to the Action Bar -* Note Editor: Allow the import of multiple files -* Import/Export -** Fixed many general problems with import/export -** Export just a deck -** Export just a note -* UI: Snackbars used where possible, and made much more pleasant -* UI: Matched the color of status, action and nav bar to background -* Card Browser: “Note” mode -* Whiteboard - Stylus Only Mode - -== Version 2.16.1 (20230726) -* Published internally, not generally released - -== Version 2.16.0 (20230726) -* Unpublished - -== Version 2.15.6 (20210714) -* One more crash fix, no crashes shall be left unfixed! If we can help it. - -== Version 2.15.5 (20210713) -* https://opencollective.com/ankidroid[🤜🤛 Thank you! Your support makes the fixes happen!] -* Full-screen navigation drawer drag is a preference, default off -* Floating Action Button ('+') labels are clickable again -* Fixed crash on first run post-install on tablets -* Fixed odd weekly breakdown stats chart behavior -* Fixed crash creating new deck from deck chooser -* https://crowdin.com/project/ankidroid[Updated translations] (thank you translators!) -* https://github.com/ankidroid/Anki-Android/milestone/47?closed=1[Full Changelog here] -* We are deep into development for v2.16 + Google Summer of Code, lots of new stuff coming -* Happy reviewing! - -== Version 2.15.4 (20210602) -* Saw one crash show up for 2.15.3: if you touched the 3 numbers - instead of the deck name on the deck list on phones, it would crash -* Temporarily revert full screen navigation drawer option to fix - -== Version 2.15.3 (20210602) -* https://opencollective.com/ankidroid[❤️ Thank you so much for the donations! We appreciate it ❤️] -* Another batch of fixes stabilizing all the work done for AnkiDroid 2.15 -* Fix "Search All Decks" in Card Browser not searching -* Make new full screen navigation drawer open optional, default off -* Preserve edited search in card browser if navigation drawer opens -* Fix crash editing Tags dialog when switching back from another app -* Fix incorrect cloze help link -* Increase touchable area of undo icon -* Fix legacy / handebar template parsing -* Fix icon sizes for notifications and search -* Fix audio files incorrectly importing when attached -* Fix deck options "steps" showing up with lots of decimal places -* Update translations, add Kannada language -* Fix F-Droid app store publishing -* Correct navigation away from and back to Changelog -* Fix template parsing for "{{FrontSide}}" -* Fix stats tab view layout in RTL context -* Fix preview of cloze cards from note editor -* https://github.com/ankidroid/Anki-Android/milestone/45?closed=1[Full changelog here] - - -== Version 2.15.2 (20210526) -* https://opencollective.com/ankidroid[❤️ Your donations here give us the time to work on the app, thank you! ❤️] -* 🔥 Hot fixes for 2.15.0 issues (See below for 2.15.0 notes 👇 it was a huge release!) -* 2.15 should have no regressions now we think 🤞 -* That means we'll slow down the releases and these popups now, sorry + thank you -* Fix another API issue breaking card add from external apps -* Fix conditional template issue that caused blank cards for some -* Fix auto-advance ignoring "no advance" setting if card had audio -* Gracefully handle corrupt collections with invalid current decks selected -* Publish to Amazon App Store again (go get AnkiDroid on your Fire devices!) -* https://github.com/ankidroid/Anki-Android/milestone/44?closed=1[Issue tracker milestone here] - - -== Version 2.15.1 (20210525) -* https://opencollective.com/ankidroid[❤️ Your donations funded this rapid set of fixes, enjoy! ❤️] -* 🔥 Hot fixes for 2.15.0 issues (See below for 2.15.0 notes 👇 it was a huge release!) -* Do not auto-update users to scheduler v2. Yet. -* Fix crash on undo after deck delete -* Try harder to successfully paste images -* Reviewer performance fix - only load mathjax if needed -* Fixed compatibility issue for 2.15 collections on 2.14 -* Fixed API issue breaking card add from external apps -* Fresh language translations. See a bad translation? https://crowdin.com/project/ankidroid[You can fix it easily!] -* https://github.com/ankidroid/Anki-Android/milestone/43?closed=1[Detailed issue log] - -== Version 2.15.0 (20210524) -* https://opencollective.com/ankidroid[❤️ Your donations funded these features, enjoy! ❤️] -* Thanks to https://github.com/ankidroid/Anki-Android/wiki/Google-Summer-of-Code-2021[Google Summer of Code] students for a HUGE effort! -* Way too many changes to describe, but here are the highlights: -* New timezone code supported for sync with AnkiDesktop! -* Performance, stability improvements everywhere -* General UI improvements (accessibility, dark mode, design, more) -* Many new keyboard shortcuts and gesture actions -* Languages: Added Odia, Malayalam; big RTL support improvements! -* Reviewer: Javascript API: many new methods -* Improved account login, sync conflict, card template UI -* Tags and Decks dialogs have search! -* Whiteboard: erase, pen colors, stroke width -* NoteEditor: Mathjax 3, capitalize sentences setting -* Huge quality improvements all over codebase, helps future developers -* https://github.com/ankidroid/Anki-Android/milestone/37?closed=1[🚧 Full 638 item changelog here! 🚧] - -== Version 2.14.6 (20210309) -* Reviewer: fix "my card is blank now with 2.14.5! help!" 😱 -* Reviewer: fix Android 8/8.1 review buttons disappear (finally?) - -== Version 2.14.5 (20210307) -* We really appreciate the https://opencollective.com/ankidroid[donations], they paid for these fixes 🤝 -* NoteEditor: Android 11 users can crop! -* NoteEditor: Canceling crop twice won't delete your image -* DeckList: parent limits altered to match Desktop -* DeckList: current deck saved as correct type -* SchedulerV2: allow very small delays -* KNOWN ISSUE: https://github.com/ankidroid/Anki-Android/issues/7369[Android 8/8.1 answer buttons disappear]. Use gestures as workaround. -* Anyone with Android 8/8.1 that reproduces this and knows how to develop Android layouts? We'd love the help! - -== Version 2.14.4 (20210307) -* Re-released immediately as 2.14.5 after release script issue 🤷😅 - -== Version 2.14.3 (20210109) -* https://www.youtube.com/c/TheAnKing[The AnKing] has graced us with a https://youtu.be/iuBU_OM9oAM[new intro video]! 🤓 -* Still happily overwhelmed by the https://opencollective.com/ankidroid[donations] 💪 -* Reviewer: Fix mark note keyboard shortcut -* NoteEditor: Fix to remove padding if removing formatting toolbar -* Previewer: Fix to show same card after edit -* Scheduler: Fix v1 scheduler completes deck when only learn cards due - -== Version 2.14.2 (20201202) -* Wow! We are humbled by the https://opencollective.com/ankidroid[donations] 🤯 -* The resources are already going to contributors to improve the app! Thank you ❤️ -* Note Editor: Fix image crop not working first time -* Note Editor: Paste image at cursor not end -* Note Editor: Fix Ctrl+C opens preview -* Note Editor: Add menubar toggle to disable editing toolbar -* Home Screen: Fix Vivo device shortcut creation (again) -* Reviewer: Fix numeric keypad not working -* Note Editor: Fix cloze cards going to wrong deck -* Navigation Menu: Fix safe display app hang -* Preferences: Fix gestures menu translation / ordering issue -* Translations: thanks https://crowdin.com/project/ankidroid/activity_stream[translators!] - you can help too! -* Full changelog: https://github.com/ankidroid/Anki-Android/milestone/39?closed=1 - -== Version 2.14.1 (2020-11-23) -* Always free, always open source, but you may https://opencollective.com/ankidroid[donate if you like 😊] -* Move sync button to right of action bar (vs search) -* Fix duplicate note detection -* Fix add deck shortcut on Vivo devices -* Fix non-translatable 'Card Info' strings -* Fix suspended card handling in filtered decks -* Sync translations from volunteers on our crowdin.com site (thank you!) -* Fix crash on mismatched WebView ABIs -* Fix crash invalid filename handling while pasting image -* Fix crash selecting cards in card browser -* Fix crash Android 8 in card browser -* Fix crash in undo labeling -* Fix crash reset password when system browser not exported -* Full changelog: https://github.com/ankidroid/Anki-Android/milestone/38?closed=1 - -== Version 2.14.0 (2020-11-18) -* Enabled Donations - we ❤️ you, https://opencollective.com/ankidroid[now you can ❤️ us 😊] -* New Screen: Card Info (from Card Browser or as a Reviewer App Bar Button) -* New Screen: Help - easy access to manual, many community pages/manuals, donation page, translations -* Home screen: Add deck shortcut -* Deck Options: SchedV2: Support setting "Hard Factor" -* Card Browser: Add deck filtering -* Card Browser: Filter By Flag -* Card Browser: Adding cards defaults to selected deck -* Card Browser: Many more keyboard shortcuts -* Card Browser: Display the number of cards deleted when deleting a note -* Card Browser: Better handling of deck searches containing wildcards -* Reviewer: Basic Android TV Support -* Reviewer: New Gesture: Abort Learning & Sync -* Reviewer: Support AnkiMobile 9-area gesture touch layout -* Reviewer: Improve "Empty Card" UX -* Reviewer: Keyboard shortcuts for flags (Ctrl+1...4) -* Note Editor: Editor Toolbar (& keyboard shortcuts) - hugely requested feature! -* Note Editor Toolbar: Apply Custom Commands (& keyboard shortcuts) -* Note Editor: Paste to Insert Image -* Note Editor: Made fields full-width -* Note Editor: Change Font Size for fields -* Note Editor: Expand/Collapse Fields -* Note Editor: Clear Field button -* Note Editor: Ctrl+Shift+[Num] to switch fields -* Note Editor: Improved image addition / naming -* Note Editor: Add preference to convert newline to HTML (or not) -* OS Integration: Default to "Anki Card" in system context menu vs "Card Browser" -* Libanki: Add FileUpload API -* Translations: Tagged screenshots on crowdin.com to help our translators -* Stability: Fix rare crashes (down to ~50/day total w/1.8million installs!) -* Performance: massive number of speedups -* Dev: Massively sped up AnkiDroid builds and improved code readability -* Totals: 345 code changes and hundreds of translations, made by volunteers, in 2 months -* Full changelog: https://github.com/ankidroid/Anki-Android/milestone/30?closed=1 - -== Version 2.13.5 (2020-10-03) -* Fix performance for fast (<1s) answers in review -* Add links to new Arabic help/manual translation -* Add back button handling to changelog display -* Add rate button to changelog -* Add warning message to handle future db upgrades -* Sync all translations from our volunteer translators (thanks everyone!) - -== Version 2.13.4 (2020-09-29) -* Fix crash showing TagsDialog -* Fix crash in gesture detection -* Improve import interrupted error message -* Fix scheduler counts after undo -* Fix Card Browser preview after sort -* Fix button display if answer animation incomplete -* Sync all translations - -== Version 2.13.3 (2020-09-23) -* Fix double-clicking answer buttons skipping cards -* Change missing media warning to twice-per-session not twice-per-deck -* Change answer button fade on open -* Updated all translations from volunteer crowdin.com site up to 20200923 - -== Version 2.13.2 (2020-09-19) -* Fix Crash rare on Card Browser exit -* Fix Crash Android 4.4 -* Fix Open Deck failures / improve related messaging -* Fix messaging for Xioami cloze workaround -* Move "set field language" after share on Note Editor context menu - -== Version 2.13.1 (2020-09-17) -* Add cloze via clipboard paste workaround on MIUI/Xiaomi devices -* Fix Navigation drawer respects safe display / disable animations preference -* Fix Reviewer buttons respect safe display / disable animations preference -* Fix Deck Picker bottom bar opacity -* Fix Error message about missing content on cards -* Fix crash selecting deck that disappears during sync - -== Version 2.13.0 (2020-09-15) -* Field tag (such as "{{Front}}") appearing in a note's field will be shown as-is in cards. -* Add Sync icon badge when changes are pending sync (can be disabled in options) -* Add Edit Note from card Preview while in Card Browser -* Add "Anki Card" to system context menu (like "Card Browser") - disabled by default -* Add Set keyboard language for specific fields in the note editor (example: one field Japanese, other field Portuguese for input). -* Add Keep keyboard open after adding a note -* Add Card properties available in JavaScript API -* Add JavaScript API versioning for scripts (basis for future plugins) -* Add Auto-Login when selecting saved user account -* Add Allow import of collection.anki21 files when under SchedV1 -* Add New screen for first-time users -* Add Button animations when answering cards -* Add Note Editor: Add shortcuts Ctrl+(Alt)+Shift+C to add a cloze. -* Fix Some cards in learning were not shown at the right time (Only if you undo/bury/suspend/reset/reschedule and the next card goes to learning mode) -* Fix Selected deck has translucent background if a deck picker background is set -* Fix Improved preview screens -* Fix Better accessibility in Deck Browser for partially sighted users -* Fix Improve visibility of "Add/Remove Option Group" -* Fix Improved messages for sync rate limiting error -* Fix Improved messages for reducing study limits -* Fix Improved messaging when collection is missing media -* Fix Improve feedback when accessing Debug Info -* Fix Add additional warnings to reschedule dialog -* Fix Whiteboard pen color can be disabled by pressing icon again -* Fix Ensure all menu items in the reviewer can be customized by "App Bar Buttons" setting -* Fix Scheduler discrepancy handling early interval on filtered decks -* Fix Exports work when cards are missing media -* Fix Crash due to logging. -* Fix Toasts used to show one more card than the number of card actually reviewed during the time box -* Fix Handle newlines properly in Note Editor Preview -* Fix Improve AnkiDroid opening animation -* Fix Show correct answer button when answering via Keyboard -* Fix "New Cards Added" Statistic -* Fix Crash when inserting a cloze when selecting text from right-to-left via keyboard -* Fix "Show Password" icon revealing saved password -* Fix Card browser still contains card after the app goes into background -* Fix Daily unbury occurs during sync if necessary -* Fix On big screen, buttons moved during loading -* Translators If some text change because of minor changes (typos) you won't have to translate it again -* Performance improvements (specifically: initial loading of large collection (lot of decks, note type, card type, fields, long templates...), card browser, deck picker startup, next card view, undo, cancelling tasks such as computing a list of card in browser) -* Dev: Massive dev workflow improvements and automated checks for our translations. -* Dev: Implement backend for CSV Importer -* Dev: Improve crash reporting on app startup -* Dev: Massive improvement in testing, especially around scheduler / card queue behavior -* Full changelog: https://github.com/ankidroid/Anki-Android/milestone/27?closed=1 - -== Version 2.12.1 (2020-07-21) -* Fix bug previewing edited notes after changing field count -* Fix crash previewing edited notes from dynamic decks -* Fix crash restarting app after a crash -* Full changelog: https://github.com/ankidroid/Anki-Android/milestone/28?closed=1 - -== Version 2.12.0 (2020-07-18) -* Add Crop image feature -* Add Preview in note editor -* Add edit tags in reviewer -* Add volume buttons as gestures -* Add whiteboard pen color -* Add microphone tool bar in reviewer -* Add javascript API (check the Wiki!) -* Improve: app is 3MB smaller -* Fix: show whole tag in tags dialog -* Fix copy note copies tags too -* Fix data corruption canceling template edits -* performance and bug fixes everywhere! - -11 volunteers made hundreds of individual changes this release - -Full changelog: https://github.com/ankidroid/Anki-Android/milestone/18?closed=1 - -== Version 2.11.3 (2020-06-17) -* Fix out-of-memory errors when importing very large decks -* Fix incorrect out-of-space message on import in Android 4 -* Fix crash if card viewer closed quickly after view -* Fix unzip fail on .apkg files >2GB -* Fix crash on edit note in browser multi-select - -== Version 2.11.2 (2020-06-10) -* Add santali language -* Fix Hebrew, Indonesian, Tagalog languages -* Improve error reporting around apkg import failures -* Details: https://github.com/ankidroid/Anki-Android/milestone/24?closed=1 - -== Version 2.11.1 (2020-06-08) -* Fix crash in Card Browser multi-select mode -* Fix Custom Steps interval dialog space entry issue -* Fix flags don't export with deck -* Fix AnkiDroid API doesn't handle null model id (Anki Compatibility workaround) -* Fix translation crash in sync dialog in Azerbaijani -* Details: https://github.com/ankidroid/Anki-Android/milestone/23?closed=1 - -== Version 2.11.0 (2020-06-05) -* Android minimum supported version is now 4.1 / Jelly Bean / API16 (AnkiWeb Compatibility) -* Change sibling burying should default to off (Anki Compatibility) -* Change learn cards do not go in filtered decks in v1 sched (Anki Compatibility) -* Add Browser Appearance screen, to edit Card Browser render format (Anki Compatibility) -* Add guidance in Note Editor if no cards will be generated despite full fields -* Add all translations from our crowdin.com translation site -* Add ability to decrease daily limit in custom study (Anki Compatibility) -* Add ability to block gesture handling when tapping hints in Reviewer -* Add create subdeck option in deck list long-press context menu -* Add edit note action in Card Browser multi-select mode -* Add ability to turn off 'Card Browser' system text context menu item -* Add nightMode CSS selector for card HTML (Anki Compatibility) -* Add ability to change just the case of a deck name -* Add page-up/page-down gestures -* Improve gesture handling in full-screen / immersive mode -* Improve handling of cloze deletion in TTS mode -* Improve Card Browser search from Android text selection menu -* Improve Card Browser with default hide of media filenames -* Improve Reviewer auto-advance by waiting for TTS to finish -* Improve transparent SVG display in night mode with white background -* Improve anki package import handling -* Improve AnkiWeb login form enter button handling -* Improve hardware back button handling in restore from backup -* Improve Reviewer display of un-rendered LaTeX -* Improve TTS / auto-answer combination, wait for TTS before advance -* Workaround Firefox open downloaded deck bug -* Workaround crash on Samsung devices with >500 deck reminders -* Fix card template editor mistakenly allowing add template on cloze type -* Fix language change preference -* Fix ability to unbury a deck in deck list -* Fix app bar item flicker during review -* Fix V2 scheduler learning card count after undo -* More details: https://github.com/ankidroid/Anki-Android/milestone/13?closed=1 - -== Version 2.10.4 (2020-05-31) -* Workaround expired AnkiWeb SSL Root certificate -* More details: https://github.com/ankidroid/Anki-Android/milestone/22?closed=1 - -== Version 2.10.3 (2020-05-29) -* Fix crash on no permissions on Card Browser system text menu entry -* Fix crash in widget if external storage unmounts -* Fix crash on device reboot if no permissions -* Fix crash if deck picker background image too large -* Fix crash in tags dialog -* Fix bad data generated for null objects (Anki compatability) -* Details here: https://github.com/ankidroid/Anki-Android/milestone/21?closed=1 - -== Version 2.10.2 (2020-05-14) -* Fix type answer cards not rendering correctly -* Fix type answer card template creation on non-English new installs -* Fix frequent full sync caused by incorrect learning card counts -* Fix crash importing into fresh install with no storage permission - -== Version 2.10.1 (2020-05-13) -* Updated all translations from crowdin translators -* Fix crash note editor on rapid back button -* Fix crash from incorrect Thai translation - -== Version 2.10 (2020-05-12) -* Add welcome dialog explaining need for storage permission -* Add support for Flags on cards (including flagging by gesture) -* Add ability to set background image in Deck Picker -* Add localization of standard templates created in fresh install -* Add support for card javascript to reload current card programmatically -* Add support for restricted learning / classroom devices -* Add preference to disable "Extended Text UI" full-screen editor -* Add CSS style capability to heavy checkmark and down arrow in card -* Add display of current interval on reschedule dialog -* Add support for card javascript to answer cards programmatically -* Add ability to toggle sticky field in field editor -* Improve deck list newline, style, script tag handling in deck descriptions -* Improve whiteboard on/off state handling, especially between day/night mode -* Improve multi-selection options in CardBrowser -* Improve performance (systematic optimization process, lots of improvements!) -* Improve handling of erroneous notes (missing fields, improper clozes) -* Improve user messaging on network connection failures -* Improve counting of suspended/buried cards in advanced statistics -* Improve v2 scheduler compatibility with Anki ecosystem -* Improve handling / detection of full sync need -* Improve Anki compatibility by allowing more field/model/deck name characters -* Improve deck list estimated review times with human scale times -* Fix text scaling bug in card browser -* Fix crash in export while using v2 scheduler -* Fix Custom Tabs crash with non-default system web browser -* Fix issues with import of packages with long Unicode names -* Fix incorrect intervals on lapsed filtered v2 scheduler cards -* Fix multimedia editor save/cancel behavior -* Fix incorrect button/gesture availability while existing task is still active -* Fix type answer crash on invalid characters -* Fix cloze references not being recognized in all fields -* Fix invalid ability to change deck to a filtered deck -* Fix crashes on adding invalid images, audios, and videos -* Fix CardBrowser crash after deleting card -* Fix crash and help user if no browser detected -* Fix Reviewer crash if card not available -* Fix crash / improve import of pasted decks -* Fix clicking hint field blocks key input in Reviewer -* Fix Previewer forgetting which card to show on device rotation -* Fix Mathjax/cloze interactions -* Fix vertical alignment of touch area in full-screen review -* Fix handling of ':::' in deck names -* Fix incorrect display of HTML comments in card browser - -== Version 2.9.7 (2020-04-30) -* Fix crash / workaround deck options timer config regression in AnkiDesktop - -== Version 2.9.6 (2020-04-03) -* Fix multimedia crashes (permissions handling, image add, preview) -* Fix UI and crashes in database check (user dialog + exception handling) -* Fix Windows 10 image compatibility issue with image paths -* Fix AnkiDesktop sync compatibility issue if more than 1000 cards due -* Fix crash in card browser render -* Fix parsing of image tags in card browser -* Fix crash in StudyOptionsFragment -* Fix issue with deck options group changing on export -* Fix issue with exports containing unexpected media -* Fix issue with dynamic decks (crash fix, export fix) -* Fix high frequency issue "AnkiDroid directory is inaccessible" -* Fix high frequency WebView (card viewer) crash -* Add columns to card browser (due, ease, changed, created, edited) -* Fix card scheduler not respecting maximum intervals -* Fix card browser spins forever on images or empty strings - -== Version 2.9.5 (2020-03-15) -* Fix crash rendering card list while updating card browser search -* Fix case-sensitivity issue with pronunciation words not being found -* Fix crash caused by auto-sync on startup showing dialog too soon -* Fix crash on preview of TTS cards showing language selectiond dialog too slowly -* Fix crash on import if collection not found -* Fix Anki ecosystem deck configuration issue for Anki Desktop users <= 2.16 -* Fix crash if user attempts to open camera or gallery and no app is available -* Fix crash building deck reminders while deck is synchronizing -* Fix crash related to audio recording stop -* Show helpful messages if import fails because device is out of space -* Fix crash when taking pictures on devices with Lollipop and older - -== Version 2.9.4 (2020-02-18) -* Fix crash when fetching pronunciations in note editor -* Fix issue with pronunciation words not being found -* Fix crash on startup for users with auto-sync on startup -* Fix crash on deck import when app is in background -* Fix crash for users of Google Chrome Canary -* Fix crash when adding certain audio clips -* Fix crash related to fetching Sound metadata -* Fix issue where audio plays twice - -== Version 2.9.3 (2020-02-09) -* Fix issues with connection timeouts and new encryption library -* Fix incorrect handling of decks with ':::' in their name - -== Version 2.9.2 (2020-02-03) -* Add support for new AnkiWeb encryption changes -* Fix some bugs using filtered decks -* Fix crash on app startup with uninitialized collection -* Fix some issues with new cloze deletion menu -* Fix issue with Mathjax + cloze deletion -* Fix incorrect intervals bug with new scheduler -* Add various patches from Anki Desktop - -== Version 2.9.1 (2019-10-16) -* Fix crash reviewing on Android 5 - 7 -* Fix crash on Hungarian translation - -== Version 2.9 (2019-10-14) -* Change to new adaptive icon -* Add multi-select in the card browser (delete, change deck, reschedule) -* Add support for new Anki 2.1 scheduler -* Add support for Mathjax -* Add ability to add local audio files to notes -* Add ability to specify filename and folder on export and import -* Add ability to insert cloze in Note Editor -* Add ability to reposition cards -* Add ability to use due reminders for specific decks -* Add support for gamepad input when reviewing -* Add support for common keyboard shortcuts from Anki Desktop -* Add ability to search in Card Browser for text from system context menu -* Add ability to recognize tts HTML elements in questions and answers -* Add ability to display LaTeX rendered to SVG (vs PNG) from Anki Desktop -* Add confirmation check for full sync trigger in preferences -* Fix excessive pull-to-sync false positives. Disable when not at top of page. -* Fix some issues with focus in Note Editor -* Fix media sync errors related to file creation issues -* Fix crash related to use of camera without permission or no camera hardware -* Fix crash related to Card Browser allowing preview with no cards selected -* Fix crash in Reviewer when collection inaccessible -* Fix crash related to TTS when TTS not initialized -* Fix crash related to sdcard mount/unmount on inaccessible collection -* Fix crash related to audio button being visible after loading pronunciation media -* Fix crash when attempting to import invalid zip files -* Fix crash related to switching from split-window mode to single-window mode -* Fix crash related to missing preferences in Preference editor -* Fix crash on deck selection after deleting a deck and immediately closing app -* Fix crash in Reviewer when non-standard browser installed -* Fix type-answer field showing unexpectedly after undo in Reviewer -* Fix incorrect display of some characters when using type-answer -* Fix error related to media in subfolders not showing in Reviewer -* Fix some issues with generated flashcard html and CSS selectors -* Fix some Glosbe and Beolingus regressions -* Fix issue where new deck was created when note type was renamed -* Fix add note button disappearing from Card Browser when returning from search -* Fix some statistics display issues -* Fix incorrect display of some preferences -* Fix invisible notification bar in NoteEditor -* Fix newline characters not working in cloze deletions -* Increase max card count display from 1000 to 99999 -* Improve display handling of very long review intervals (> 68 years) -* Improve next/back buttons when using Previewer on multiple cards -* Improve handling of selected deck between statistics, card browser and deck picker -* Improve Card Browser search by restoring when returning from other activities -* Improve card focus handling when moving between Note Editor and Card Template Editor -* Improve labeling of deck-group vs deck-specific options -* Improve formatting of HTTP error codes during sync -* Improve handling of multi-touch events while whiteboard displayed -* Improve permission dialog descriptions -* Improve handling of "preview new cards" setting when creating custom study deck -* Improve Navigation Drawer performance on older devices -* Improve database check dialog with addition progress updates during check -* Use different notification channels for study reminders and general notifications -* Drop support for Android < Ice Cream Sandwich MR1 (API15, Android 4.0.3) -* Add support for more features on Chromebook (import, export, restore backup, camera) -* Add API support for card/note bury and suspend -* Add API to open Reviewer on specific decks from other apps -* Add support for HTML/Javascript debugging -* Add link to third party apps which support AnkiDroid API in advanced preferences -* Fix issue with custom sync server certificates -* Perform basic DB integrity check on app upgrade -* Introduce optional analytics reporting - -== Version 2.8.4 (2018-04-27) -* Fix error syncing due to too many card templates - -== Version 2.8.3 (2017-11-10) -* Fix crash adding a picture from camera -* Fix add note icon disappearing in browser after search -* Fix translations from Glosbe -* Fix crash long-tapping when no deck is selected -* Fix crash entering advanced settings on some devices -* Fix incorrect graph display in statistics -* Fix deck not changing properly in statistics -* Fix rounding error in statistics weekly breakdown -* Fix spurious new deck created on model rename -* Improve error message on exception during media sync -* Improve animation when transitioning between screens -* Use a round icon on devices that support it - -== Version 2.8.2 (2017-02-28) -* Fix bugs showing confirmation dialogs in various places -* Fix uncommon crash showing dialog after sync - -== Version 2.8.1 (2017-02-06) -* Allow sending exported apkg to arbitrary app (e.g. Google Drive) -* Allow AnkiWeb to display a warning on sync completion -* Fix potential full-sync after sync cancellation -* Fix media sync sometimes scanning all files again -* Fix removing $ character when importing media files -* Improve automatic card answer timing when audio is played -* Improve rendering of some statistics -* Fix some crashes in the Russian, Vietnamese, and Chinese translations -* Fix crash sending exported apkg by email. NB: Export path can no longer be modified. - -== Version 2.7 (2016-10-16) -* Add pull-to-sync feature -* Add option to place answer buttons at the top -* Add widget to directly access "Add note" screen -* Fix issue with importing whole collections and restoring backups -* Fix deck import failing after the first successful one -* Fix cards in learning queue not being randomized -* Fix crash with fullscreen mode and hidden answer buttons -* Fix rare crash when opening deck options -* Improve support with TalkBack - -== Version 2.6.1 (2016-07-08) -* Add card cycling in previewer (similar to desktop client) -* Add option to hide 'minutes left' in reviewer -* Fix language from app setting not always being used -* Fix not being able to play back new sound recording -* Fix potential crash on Android 2.3 (Gingerbread) -* Improved use of horizontal space when resizing large images -* Minor adjustment to black theme colors - -== Version 2.6 (2016-06-14) -* Add two new themes (black, plain), selectable in preferences -* Make reviewer app bar icons customizable -* Split "hide / delete" menu in reviewer into "bury", "suspend", "delete note" -* Reviewer undo button now removes last stroke when whiteboard in use -* Add menu entry to change TTS language from reviewer -* Add more of the statistics available on the desktop client -* Add "advanced statistics" plugin (must be enabled in advanced settings) -* Add setting to configure custom sync server (advanced) -* Fix card templates created in AnkiDroid incorrectly using bold style -* Fix many importing issues (behavior now consistent with the desktop client) -* Fix long-tapping card in browser not always working -* Update sound playback button image -* Reduce size of whiteboard and gesture area for better interoperability with full screen -* Improve error messages with inaccessible collections -* Allow auto-play of HTML media elements (for templates that enable it) -* Significant updates to the content provider and API (for developers; see documentation) -* Many small bug fixes, improvements, theme adjustments, translation updates - -== Version 2.5.4 (2015-12-14) -* Fix background color in overflow menu of deck picker - -== Version 2.5.3 (2015-12-14) -* Fix floating action button (blue +) interfering with deck list on Android 2.3 -* Fix opening apkg files from Gmail -* Fix automatic playback of consecutive videos -* Add a new launch screen -* Improve behaviour surrounding the deck overview screen -* Multiple media files can now be added to one field in the note editor -* Don't include unused media files on export -* Undo behaviour is now consistent with the desktop client (can no longer undo note edits) -* Enhancements to sync canceling -* Minor performance enhancements, crash fixes, and UI tweaks - -== Version 2.5.2 (2015-12-04) -* Fix start-up crashes on Samsung devices running Android 4.2 -* Fix crash for new users on Android 6.0 -* Reverted to old typing method. The new method is now an option which is off by default. -* You can now click on the numbers in the right-most part of the deck list to open the deck overview screen -* Various fixes to transition animations and progress bars -* Add option to remove empty cards (previously only possible on desktop) -* Remove: Google Translate filter. In practice, this feature had no effect and is not required -* Remove: Google image search for multimedia card. The image search API has been discontinued by Google and no longer works - -== Version 2.5.1 (2015-12-01) -* Fix crash when loading deck list (could not open collection bug) -* Fix visible progress bar showing when answering card - -== Version 2.5 (2015-11-30) -* Redesign of user interface to use material design -* Add new dark theme -* Simplify the study process by bypassing deck overview screen -* Add ability to add, edit, delete note types -* Add setting to enable auto-sync and a Tasker intent to trigger sync -* Replace "instant add" feature with new API for 3rd party apps to add cards directly to AnkiDroid -* "Type in the answer" input box now built into the card html itself -* Make fullscreen-mode immersive and added setting to hide answer buttons when using gestures -* Add css class for customizing card background color when night mode is enabled -* Allow changing media volume from the deck picker -* Add ability to save and view common searches in the card browser -* Browser now shows full question and answer in the results by default -* Only show tags relevant to that deck when doing custom study by tag -* Fix some bugs in the widget -* Remove "simple interface" -* Remove support for Android version 2.1 and 2.2 (minimum is now 2.3.3) -* Add support for Android 6 Marshmallow -* Disable write-ahead-logging in sqlite database -* Many other bug fixes and small improvements - -== Version 2.4.4 (2015-10-20) -* Fix playback of sound files with apostrophes in file name -* Fix new card siblings not being buried for the same day -* Fix media on cards when using the Hebrew Fix option -* Fix crashes related to "Relative overdueness" and make this sort order available on AnkiDroid -* When mixing new and review cards, make their rotation more consistent with desktop - -== Version 2.4.3 (2015-04-21) -* Fix "unknown field" bug -* Fix crash showing welcome screen on Android 2.3 -* Fix crash caused by widget -* Fix rare crash in browser -* Fix a couple of sync issues -* Fix crash starting AnkiDroid on a small number of devices -* Update translations - -== Version 2.4.2 (2015-03-18) -* Fix some bugs with cloze templates -* Fix a translation error - -== Version 2.4.1 (2015-03-15) -* Fix some bugs with filtered decks -* Improve importing of shared decks -* Open settings if AnkiDroid dir inaccesible -* Fix a bug with zooming -* Fix a bug where old card was still shown in reviewer after changing deck -* Fix some issues with cloze deletion -* Fix various crashes -* Update translations - -== Version 2.4 (2015-01-28) - * Move "preview" feature to browser - * Add ability to change note type of existing flashcards - * Add ability to view and delete card templates - * Fix TTS for most devices - * Support playback of videos (see supported formats http://developer.android.com/guide/appendix/media-formats.html[here]) - * Improve rendering of second column in browser - * Improve detection of swipe gestures - * Increase number of languages in Glosbe translator - * Add support for Chromebooks - * New crash report system - * Bug fixes - -== Version 2.3.2 (2014-11-06) - * Bug fixes: Sync, TTS, Remote images, Advanced editor, Export - * Note: This is the last version of AnkiDroid supported by AnkiWeb. Previous versions will not sync. - -== Version 2.3 (2014-10-27) - * Add new user manual - * Make statistics identical to Anki Desktop - * Fixes to media sync - * Fix bug where images were not showing - * Change layout of note editor - * Add new disable whiteboard option to reviewer and update icons - * Add full support for APKG export and import - * Add feature to email exported APKG - * Increase default number of backups and use APKG - * Make preview card accessible from card browser - * Make shared decks download with Android browser - * Add reset and reschedule feature in note editor - * Add a new notification system and icon - * Replace tutorial deck with new welcome screen - * Disable opening navigation drawer from reviewer when swipe is used - * Improve audio recording quality - * Support sticky fields when enabled in Anki Desktop - * Many other bug fixes - -== Version 2.2.3 (2014-08-04) - * New media sync protocol - * Fix 2 bugs for opening links and resuming the app - -== Version 2.2 (2014-07-21) - * Redesign layout - * Add pictures and sounds to flashcards (experimental) - * Make second column in card browser configurable - * Make images on flashcards zoomable - * Improve preview feature and access via action bar - * Simplify menus and settings - * Make slow searches in card browser cancellable - * Improve adding/removing tags - * Fix "type in the answer" and cloze deletion features - * Fix whiteboard feature - * Restore backups from within the app - * Make volume duck on any background music when sounds played - * Make playing of sounds consistent with Desktop version - * Remove animations feature due to being buggy - * Improve speed of showing cards - * Remove duplicate check dialog when adding new flashcards - * Remove swap button when adding or editing flashcards - * Remove kanji info feature (will become optional plugin in the future) - * Make minimum Android version 2.1 - * Fix lots of bugs - -== Version 2.1.3 (2014-04-05) - * Create new notes in correct deck - * TTS fixes - -== Version 2.1 (2014-03-27) - * Lots of Bug Fixes - * New custom study option with improved tag selection - * New preview card feature in note editor (experimental) - * New override font preference in addition to default font - * New "Kanji Info" feature (enabled in preferences->reviewing->Kanji Info) - * Improve Aedict integration - * Support for Samsung Multi-Window - * Fix Some TTS Issues - * Updated Translations - * Remove unused media check when deleting decks - * Significantly increase speed for reducing filtered decks - * Remove upgrade wizard - -== Version 2.0.4 (2014-02-03) - * Fix issue with typing answers - * Default font now overrides card font - * Fixed audio playback image being covered by text on Android 2.3 - * Fixed reviewer crash when language set to Romanian - * Translation fixes - -== Version 2.0.2 (2013-12-15) - * Fixed lots of crashes - * Tablet UI fixes - * Fixed new card ordering issues - * Card appearance now matches desktop Anki. (Centering cards is off by default but can be re-enabled) - * Option groups can now be changed in AnkiDroid - * Clear error message when using a bad template - * Fixed timeboxing notifications - * Properly scale images - * Better custom font handling - * More settings (next day starts at, timeboxing value, etc.) - * Changing AnkiDroid interface language now works. - * Fixed import/shared deck download issues ("not a valid apkg file") - * Fixed invisible text on Motorola devices - * Focus on answer when revealed - * Filtered decks are now blue in deck list - * Removed unused circle button in note editor - -== Version 2.0.1 (2013-02-06) - * Upgrade wizard - * Fix importing apkgs - * Fix media syncing - -== Version 2.0 (2013-01-03) - * complete revision - * libanki2.0 scheduling - * new learning mode - * new layout - * merge syncing possible now - * better statistics - * decks are now saved in a single collection - * options are shareable now - * tablet layout - * tons of performance improvements - * card import function - * collection can be saved on internal memory - -== Version 0.1 to 1.1.3 -AnkiDroid has continuously evolved collectively as an open source project, with the first version released to the Google Market on http://nicolas-raoul.blogspot.jp/2009/06/just-published-ankidroid-on-market.html[June 28 2009]. -Version 1.1.3 was the last 1.x version (released on 26th June 2012), before the incompatible AnkiDroid v2.0 was released, -essentially rewritten from scratch to be compatible with the new Anki Desktop v2.0. diff --git a/docinfo.html b/docinfo.html deleted file mode 100644 index dda5e7f..0000000 --- a/docinfo.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/dprint.json b/dprint.json new file mode 100644 index 0000000..22c3a0d --- /dev/null +++ b/dprint.json @@ -0,0 +1,17 @@ +{ + "json": { + }, + "markdown": { + }, + "toml": { + }, + "includes": ["**/*.{json,md,toml}"], + "excludes": [ + "**/*.json" + ], + "plugins": [ + "https://plugins.dprint.dev/json-0.17.1.wasm", + "https://plugins.dprint.dev/markdown-0.15.2.wasm", + "https://plugins.dprint.dev/toml-0.5.4.wasm" + ] +} diff --git a/help-ar.asc b/help-ar.asc deleted file mode 100644 index d2cc91e..0000000 --- a/help-ar.asc +++ /dev/null @@ -1,51 +0,0 @@ -:docinfo1: -[.rtl] -= دعم أنكيدرويد -:sectanchors: - -[.text-left.big] -(link:help-ja.html[日本語]) (link:help-ru.html[Русский]) (link:help-zh-CN.html[中文]) (link:help-ro.html[Română]) - -== قبل السؤال - -قبل طلب المساعدة، الرجاء محاولة البحث في link:manual-ar.html[دليل أنكيدرويد]، -وقائمة https://github.com/ankidroid/Anki-Android/wiki/FAQ[الأسئلة المتكررة]، -و https://docs.ankiweb.net/#/[دليل أنكي الرئيسي] للمساعدة العامة بخصوص نظام أنكي وميزاته، وأي أمور غير محصورة بأنكيدرويد. - -== دعم -إذا لم تجد ما تبحث عنه في الوثائق المذكورة في الأعلى، الرجاء زيارة واحد من المواقع التالية: - -أمور غير محصورة بأنكيدرويد :: أنكيدرويد (نسخة الأندرويد من أنكي) منشأ ومدار بشكل مستقل عن النسخ الأخرى. -لإصدارات الحاسوب / الويب / أي أو إس، والأمور غير المحصورة بأنكيدرويد، الرجاء زيارة https://forums.ankiweb.net/[موقع دعم أنكي] الرئيسي. - -أسئلة أنكيدرويد :: للأسئلة والمساعدة بخصوص أنكيدرويد، الرجاء زيارة https://groups.google.com/forum/#!forum/anki-android[منتدى المستخدمين]، -كما يمكنك إرسال أسئلتك إلى mailto:public-forum@ankidroid.org[عنوان البريد الإلكتروني العام] والمخصص للمنتدى -إذا لم تكن تريد التسجيل في المنتدى. - -تقارير الأعطال وطلبات الميزات :: لتقارير الأخطاء وطلبات الميزات، الرجاء الاطلاع على القائمة الحالية للمشاكل المفتوحة في -https://github.com/ankidroid/Anki-Android/issues[متعقب أعطال أنكيدرويد]، -وإذا لم تكن هناك منشورات تخص مشكلتك، أنشئ واحدًا جديدًا مع توفير أكبر قدر ممكن من المعلومات. -لتقارير الأعطال، الرجاء تضمين «معلومات التصحيح» أيضًا باتباع الخطوات التالية: - -1. افتح قائمة التنقل بالنقر على الزر في أعلى يسار الشاشة -2. انقر «إعدادات» -3. انقر «خيارات متقدمة» -4. انقر «حول أنكيدرويد» في الأسفل -5. انقر زر «نسخ معلومات التصحيح» في الأسفل لنسخ المعلومات إلى الحافظة -6. إذا كنت تكتب تقرير العطل على هاتف محمول، الصق محتوى الحافظة في المنشور. -كبديل، تستطيع لصق محتوى الحافظة في بريد إلكتروني جديد، وإرساله إلى نفسك، ثم نسخه ولصقه -في تقرير العطل على حاسوبك. - -++++++++++ - -++++++++++ - -**ملاحظة:** إذا لم تكن قادرًا على فتح التطبيق أبدًا، وبالتالي لا يمكنك الوصول إلى الإعدادات، -الرجاء الاطلاع على https://github.com/ankidroid/Anki-Android/wiki/Unopenable-collections[هذه التعليمات]. - -إن معلومات التصحيح هذه مهمة لأنها تسمح لنا بمطابقة تقريرك مع معلومات تقارير الأعطال الداخلية عندنا. - -=== المساهمة في أنكيدرويد -إن أنكيدرويد مشروع مفتوح المصدر، والجميع مشجع على المساهمة (بما في ذلك غير المطورين)! -لمعلومات حول كيفية المساهمة، الرجاء الاطلاع على https://github.com/ankidroid/Anki-Android/wiki/Contributing[صفحة ويكي المساهمة]، -وطرح أي أسئلة إضافية في https://groups.google.com/forum/#!forum/anki-android[المنتدى الرئيسي]. diff --git a/help-ja.asc b/help-ja.asc deleted file mode 100644 index 5066a63..0000000 --- a/help-ja.asc +++ /dev/null @@ -1,40 +0,0 @@ -:docinfo1: -= AnkiDroid サポート -:sectanchors: - -[.text-right.big] -(link:help.html[English]) (link:help-ru.html[Русский]) (link:help-zh-CN.html[中文]) (link:help-ro.html[Română]) - -== お問い合わせの前に - -お問い合わせの前に、link:manual-ja.html[AnkiDroid マニュアル]、AnkiDroidプロジェクトのサイトに掲載されている https://github.com/ankidroid/Anki-Android/wiki/FAQ[FAQ(よくある質問)](英語)、そして http://wikiwiki.jp/rage2050/[PCソフト「Anki」のマニュアル]をお読みください。Ankiのマニュアルは、AnkiDroidを含むAnkiシステム全般の機能や特徴、注意点について知るのに役立ちます。 - -== サポート -お求めの情報が上記リンク先で見つからなかった場合は、下記の関連サイトをご覧ください。 - -AnkiDroidに限定されない問題に関するお問い合わせ :: AnkiDroid(AnkiのAndroidアプリ版)は、Ankiの作者 Damien Elmes 氏 が管理する他のバージョンのAnkiと異なり、有志グループによって独自に開発・管理されています。PCソフトAnki、Web版Anki(AnkiWeb)、iOSアプリ版Anki(AnkiMobile)等に関する問題や、AnkiDroidに限らずAnki全体に共通する問題については、「本家」であるAnkiの https://anki.tenderapp.com/[サポートページ] (英語)にお問い合わせください。 - -AnkiDroidに関するお問い合わせ :: AnkiDroidに関するお問い合わせは、 https://groups.google.com/forum/\#!forum/ankidroid-nihon[ユーザーフォーラム(日本語用)]に投稿するか、このフォーラムのmailto:ankidroid-nihon@googlegroups.com[アドレス]にメールしてください。(訳注:お問い合わせを英語で行う場合は、こちらの https://groups.google.com/forum/#!forum/anki-android[ユーザーフォーラム]に投稿するか、このフォーラムのmailto:public-forum@ankidroid.org[アドレス]にメールしてください。) - -バグレポートや新機能リクエスト :: バグ(不具合)の報告や新機能のリクエストを送りたい場合は、まず https://github.com/ankidroid/Anki-Android/issues[AnkiDroidイシュートラッカー](英語)に公開されているイシュー(課題)リストに同じ内容がないかどうか確認してみてください。 -ない場合は、新しいイシューを作成し、できるだけ詳しい情報を記載してください。 -バグ報告の場合は、下記の手順で「デバッグ情報」も記載してください。 - -1. 画面左上の「≡」の形のボタンをタップしてください。(ドロワーメニューが開きます。) -2. [設定]をタップしてください。 -3. [拡張機能]をタップしてください。 -4. [AnkiDroid について]をタップしてください。 -5. 画面下の[デバッグ情報をコピー]をタップしてください。(「デバッグ情報」がクリップボードにコピーされます。) -6. ご使用中のAnkiDroidが入っているモバイル端末(スマホやタブレットなど)上で -https://github.com/ankidroid/Anki-Android/issues[AnkiDroidイシュートラッカー]を開いてバグレポートを書き上げた場合は、クリップボードの内容をそのレポート文中に直接貼り付けてください。または、(訳注:モバイル端末でこうしたレポートを書き上げるのは大変だと思う方などは、)端末のメール機能でメールを新規作成し、その本文にクリップボードの内容を貼り付け、そのメールをあなた自身に送信してください。それから、PC上でそのメールを開いて本文の内容をコピーし、PC上で(訳注:上記の https://github.com/ankidroid/Anki-Android/issues[AnkiDroidイシュートラッカー]を開いて)書き上げたバグレポートの文中に貼り付けてください。 - -++++++++++ - -++++++++++ - -この「デバッグ情報」は重要です。これがあると、サポートチームはあなたが書いたバグレポートとあなたのAnkiDroidが送信したクラッシュレポートとを照らし合わせることができます。 - -== AnkiDroidへの貢献 -AnkiDroidはオープンソースプロジェクトです。このアプリの発展に貢献したいという方であればどなたでも(アプリ開発者でない方も)歓迎いたします。AnkiDroidへの貢献に関心を持たれた方は、最初にAnkiDroid公式サイトの https://github.com/ankidroid/Anki-Android/wiki/Contributing[“Contribution”](貢献)のページ(英語)をご覧の上、 https://groups.google.com/forum/#!forum/ankidroid-nihon[ユーザーフォーラム(日本語用)]にお問い合わせください。 - -(訳注:お問い合わせを英語で行う場合は、こちらの https://groups.google.com/forum/#!forum/anki-android[ユーザーフォーラム]にお問い合わせください。) diff --git a/help-ro.asc b/help-ro.asc deleted file mode 100644 index 802508d..0000000 --- a/help-ro.asc +++ /dev/null @@ -1,42 +0,0 @@ -:docinfo1: -= Ajutor pentru AnkiDroid -:sectanchors: - -[.text-right.big] -(link:help-ja.html[日本語]) (link:help-ru.html[Русский]) (link:help-zh-CN.html[中文]) (link:help-ro.html[Română]) - -== Înainte să întrebați - -Înainte să cereți ajutor, vă rugăm să căutați în link:manual.html[Manualul AnkiDroid], lista de https://github.com/ankidroid/Anki-Android/wiki/FAQ[Întrebări Frecvente], și de asemenea în https://docs.ankiweb.net/#/[Manualul Anki] -pentru ajutor legat de sistemul Anki, opțiunile acestuia și alte probleme care nu se limitează la Android. - -== Ajutor - -Dacă nu ați găsit ce căutați în documentația de mai sus, vă rugăm să vizitați legătură potrivită de mai jos: - -Probleme nespecifice Android :: AnkiDroid (aplicația Anki pentru Android) este creată și gestionată independent de alte aplicații Anki. Pentru aplicațiile PC / Web / iOS, și alte probleme generale Anki care nu se limitează la Android, vă rugăm să vizitați https://forums.ankiweb.net/[site-ul de ajutor Anki]. - -Întrebări legate de AnkiDroid :: Pentru ajutor și întrebări care privesc AnkiDroid, vă rugăm să vizitați https://groups.google.com/forum/#!forum/anki-android[forumul utilizatorilor], sau puteți trimite întrebările dumneavoastră -la mailto:public-forum@ankidroid.org[adresa publică de email] a forumului dacă nu doriți să vă înregistrați. - -Raportarea erorilor și cereri de îmbunătățire a aplicației :: Pentru raportarea erorilor si cereri de îmbunătățire a aplicației, vă rugăm să căutați în lista de probleme din https://github.com/ankidroid/Anki-Android/issues[monitorul de probleme AnkiDroid] și dacă nu există deja o discuție pentru problema semnalată, creați o nouă discuție furnizând cât mai multe informații posibil. -Pentru raportarea erorilor, vă rugăm să includeți și "informațiile de diagnosticare" care pot fi obținute urmând pașii de mai jos: - -1. Deschideți sertarul de navigație din aplicație apăsând pe butonul aflat în colțul din stânga sus al ecranului -2. Apăsați "setări" -3. Apăsați "avansat" -4. Apăsați "despre AnkiDroid" aflat în partea de jos a ecranului -5. Apăsați butonul "copie informații de diagnosticare" din partea de jos (asta copie "informații de diagnosticare" în memorie) -6. Dacă faceți raportarea erorii de pe dispozitivul mobil, atunci alipiți conținului anterior din memorie direct la discuție. Alternativ, puteți alipi conținutul anterior din memorie într-un email pe care să vi-l transmiteți și apoi să adăugați conținutul acelui email la discuție de pe calculatorul dumneavoastră. - -++++++++++ - -++++++++++ - -**Notă:** dacă nu puteți deschide aplicația și nu aveți acces la "setări" vă rugăm să urmați https://github.com/ankidroid/Anki-Android/wiki/Unopenable-collections[aceste instrucțiuni]. - -Aceste "informații de diagnosticare" sunt importante pentru că ne permit să facem legătura dintre raportarea dumneavoastră și unealta noastră internă care ne oferă date despre erorile din aplicație. - -=== Contribuie la AnkiDroid -AnkiDroid este o aplicație cu sursă deschisă si oricine este binevenit să contribuie (includem și pe cei care nu sunt dezvoltatori software)! Pentru ajutor legat de modul cum puteți contribui la AnkiDroid vă rugăm să citiți https://github.com/ankidroid/Anki-Android/wiki/Contributing[pagina pentru contribuții] și să puneți alte intrebări pe https://groups.google.com/forum/#!forum/anki-android[forumul principal]. - diff --git a/help-ru.asc b/help-ru.asc deleted file mode 100644 index 81ff0a3..0000000 --- a/help-ru.asc +++ /dev/null @@ -1,52 +0,0 @@ -:docinfo1: -= Поддержка AnkiDroid -:sectanchors: - - -[.text-right.big] -(link:help.html[English]) (link:help-ja.html[日本語]) (link:help-zh-CN.html[中文]) (link:help-ro.html[Română]) - - -== Перед обращением - - -Прежде, чем обратиться за помощью, ознакомьтесь, пожалуйста, с link:manual.html[Руководством по AnkiDroid (англ.)], с разделом https://github.com/ankidroid/Anki-Android/wiki/FAQ[Часто задаваемые вопросы (англ.)], а также с базовым https://docs.ankiweb.net/#/[Руководством по Anki (англ.)]. Там вы найдёте общий обзор Anki, описание функций Anki, и ответы на различные, не только связанные с Android, вопросы. - - -== Поддержка -Если найти ответ выше не удалось, обратитесь, пожалуйста, к соответствующему ресурсу: - - -Проблемы, не связанные с Android :: AnkiDroid (версия Anki для Android) разрабатывается независимо от других версий Anki. Для получения информации по PC / Web / iOS версиям, а также по общим проблемам Anki, смотрите https://anki.tenderapp.com/[основной сайт поддержки (англ.)]. - - -Вопросы по AnkiDroid :: Для вопросов и помощи по AnkiDroid, пожалуйста, посетите https://groups.google.com/forum/#!forum/anki-android[пользовательский форум]. Если вы предпочитаете не регистрироваться на форуме, можно вместо этого отправить свои вопросы mailto:public-forum@ankidroid.org[сюда]. - - -Есть идея? Нашли ошибку? :: Чтобы сообщить об ошибке или предложить нововведение, пожалуйста, обратитесь к https://github.com/ankidroid/Anki-Android/issues[списку открытых проблем (англ.)]. Если похожей темы нет, создайте новую с максимально подробным описанием. - - -В сообщение об ошибке важно включить “данные для отладки”, выполнив следующие шаги: - - -1. Откройте навигационную панель, нажав на кнопку в левом верхнем углу экрана -2. Выберите “Настройки" -3. Выберите "Расширенные" -4. Выберите "Об AnkiDroid" в самом низу списка -5. Нажмите на кнопку "Копировать данные для отладки" в самом низу экрана (помещает их в буфер обмена) -6. Если вы пишете сообщение об ошибке с телефона, просто вставьте его прямо в текст. Кроме того, вы можете отправить содержимое буфера обмена себе электронным письмом, и включить в сообщение с компьютера. - - -++++++++++ - -++++++++++ - - -**Примечание:** если открыть приложение и получить доступ к настройкам невозможно, пожалуйста, следуйте инструкциям https://github.com/ankidroid/Anki-Android/wiki/Unopenable-collections[по этой ссылке (англ.)]. - - -Информация об отладке очень важна: она позволит нам сопоставить ваше сообщение с нашим внутренним отчетом об ошибке и своевременно исправить проблему. - - -=== Как помочь AnkiDroid? -AnkiDroid - проект с открытым исходным кодом, и мы рады любой помощи (не обязательно даже уметь программировать)! Чтобы помочь AnkiDroid, ознакомьтесь, пожалуйста, с https://github.com/ankidroid/Anki-Android/wiki/Contributing[этой вики-страницей (англ.)], а с любыми возникшими вопросами обращайтесь на https://groups.google.com/forum/#!forum/anki-android[главный форум]. diff --git a/help-zh-CN.asc b/help-zh-CN.asc deleted file mode 100644 index dcec69e..0000000 --- a/help-zh-CN.asc +++ /dev/null @@ -1,37 +0,0 @@ -:docinfo1: -= AnkiDroid Support -:sectanchors: - -[.text-right.big] -(link:help.html[English]) (link:help-ja.html[日本語]) (link:help-ru.html[Русский]) (link:help-ro.html[Română]) - -== 提问之前 - -请求帮助之前, 请先试着先通过这个链接link:manual-zh-CN.html[AnkiDroid 手册]搜索类似问题,你也可以通过 https://github.com/ankidroid/Anki-Android/wiki/FAQ[常见问题解答]列表, 以及官方 link:http://ankisrs.net/docs/manual.html[Anki手册] 查找常见的Anki系统问题,这里的阐述的anki的特点不仅限于android,它适用于各种anki软件系统. - -== 支持 -如果你不能从上面提供的文档中找到你所需要的,请进入下面相关网站: - -非android特定问题 :: AnkiDroid (Anki的android版本) 不同于其他版本,被单独创建和管理的. Android版本不负责PC / Web / iOS 版本, 以及一般的 Anki 问题, 这些版本遇到的问题请参阅 https://anki.tenderapp.com/[Anki 支持网站]. - -AnkiDroid问题 :: 有关AnkiDroid的帮助和支持, 请参阅link:https://groups.google.com/forum/#!forum/anki-android[用户论坛](这是一个全英文网站),您也可以登陆 link:https://bbs.ankichina.net[Anki中国论坛]查询您的问题, 或者你不想再论坛上注册,你也可以将你的问题发送到这个论坛的 mailto:public-forum@ankidroid.org[公共邮箱] . - -Bug报告和功能要求 :: 对于Bug报告和功能要求,请在开放问题页面 https://github.com/ankidroid/Anki-Android/issues[AnkiDroid 问题追踪]中进行搜索, -如果你的问题在这个页面中不存在,可以创建一个新的问题,问题要尽可能描述清楚. -对于Bug报告,可以通过以下几个步骤将debug信息包含: - -1. 点击屏幕左上角的图标,进入导航抽屉 -2. 点击 "设置" -3. 点击 "高级" -4. 点击 底部的"关于 AnkiDroid" -5. 点击 底部的"拷贝 debug 信息" 按钮 (这样将会把debug信息拷贝到剪切板) -6. 如果你在移动设备上填写bug报告,则可以直接将这些内容粘贴到问题栏中,同样,你也可以你也可以将这些内容粘贴到你的一个新的邮件中,发送到你的电脑,再通过您的电脑发送bug报告给我们. - -++++++++++ - -++++++++++ - -"debug 信息" 对我们很重要,因为他可以让我们将你报告的问题和我们程序内部崩溃的数据联系起来. - -=== 对AnkiDroid进行贡献 -AnkiDroid是一个开源项目, 欢迎任何人参与贡献 (包括非开发人员)! 有意对AnkiDroid进行贡献, 请参阅 https://github.com/ankidroid/Anki-Android/wiki/Contributing[贡献维基页面], 你可以在 https://groups.google.com/forum/#!forum/anki-android[论坛]提出进一步的问题. diff --git a/help.asc b/help.asc deleted file mode 100644 index 7d9ba44..0000000 --- a/help.asc +++ /dev/null @@ -1,50 +0,0 @@ -:docinfo1: -= AnkiDroid Support -:sectanchors: - -[.text-right.big] -(link:help-ja.html[日本語]) (link:help-ru.html[Русский]) (link:help-zh-CN.html[中文]) - -== Before Asking - -Before asking for help, please try searching through the link:manual.html[AnkiDroid Manual], the list of https://github.com/ankidroid/Anki-Android/wiki/FAQ[Frequently Asked Questions], and also the main https://docs.ankiweb.net/#/[Anki Manual] for general help with the Anki system and features, and any issues not limited to Android. - -== Support -If you were unable to find what you needed in the documentation above, please visit the relevant site below: - -Non-Android-Specific Issues :: AnkiDroid (the Android version of Anki) is created and managed independently from other Anki versions. For the PC / Web / iOS versions, and general Anki issues that are not limited to Android, please visit the main https://forums.ankiweb.net/[Anki support site]. - -AnkiDroid Questions :: For questions and help concerning AnkiDroid, please visit the https://groups.google.com/forum/#!forum/anki-android[user forum], or you can send your questions to the forum's mailto:public-forum@ankidroid.org[public email address] if you don't want to register on the forum. - -Bug Reports and Feature Requests :: For bug reports and feature requests, please search through the current list of open issues on the https://github.com/ankidroid/Anki-Android/issues[AnkiDroid issue tracker], -and if there are no existing issues, create a new issue including as much information as possible. -For bug reports, please also include the output of "debug info" by following the steps below: - -=== AnkiDroid 2.16+ - -1. Open the navigation drawer by tapping the button on the top left of the screen -2. Tap "Settings" -3. Tap "About" -4. Tap the "Copy debug info" button at the bottom (which copies "debug info" to the clipboard) -5. If filling out the bug report on your mobile device, paste the contents of the clipboard directly to the issue. Alternatively, you can paste the contents of the clipboard into a new email, send it to yourself, then copy and paste that into the bug report from your computer. - - -=== AnkiDroid 2.15 and below - -1. Open the navigation drawer by tapping the button on the top left of the screen -2. Tap "Settings" -3. Tap "Advanced" -4. Tap "About AnkiDroid" at the bottom -5. Tap the "Copy debug info" button at the bottom (which copies "debug info" to the clipboard) -6. If filling out the bug report on your mobile device, paste the contents of the clipboard directly to the issue. Alternatively, you can paste the contents of the clipboard into a new email, send it to yourself, then copy and paste that into the bug report from your computer. - -++++++++++ - -++++++++++ - -**Note:** if you are unable to open the app at all, so cannot even access "settings" then please follow https://github.com/ankidroid/Anki-Android/wiki/Unopenable-collections[these instructions]. - -This "debug info" is important as it allows us to match your report with our internal crash report data. - -=== Contributing to AnkiDroid -AnkiDroid is an open source project, and anyone is welcome to contribute (including non-developers)! For help with contributing to AnkiDroid, please first check the https://github.com/ankidroid/Anki-Android/wiki/Contributing[contribution wiki page], and ask any further questions in the https://groups.google.com/forum/#!forum/anki-android[main forum]. diff --git a/icons/android-chrome-144x144.png b/icons/android-chrome-144x144.png deleted file mode 100644 index 77d1e36..0000000 Binary files a/icons/android-chrome-144x144.png and /dev/null differ diff --git a/icons/android-chrome-192x192.png b/icons/android-chrome-192x192.png deleted file mode 100644 index daf71ba..0000000 Binary files a/icons/android-chrome-192x192.png and /dev/null differ diff --git a/icons/android-chrome-36x36.png b/icons/android-chrome-36x36.png deleted file mode 100644 index 062143b..0000000 Binary files a/icons/android-chrome-36x36.png and /dev/null differ diff --git a/icons/android-chrome-48x48.png b/icons/android-chrome-48x48.png deleted file mode 100644 index f2c3291..0000000 Binary files a/icons/android-chrome-48x48.png and /dev/null differ diff --git a/icons/android-chrome-72x72.png b/icons/android-chrome-72x72.png deleted file mode 100644 index 612382f..0000000 Binary files a/icons/android-chrome-72x72.png and /dev/null differ diff --git a/icons/android-chrome-96x96.png b/icons/android-chrome-96x96.png deleted file mode 100644 index 493f658..0000000 Binary files a/icons/android-chrome-96x96.png and /dev/null differ diff --git a/icons/apple-touch-icon-114x114.png b/icons/apple-touch-icon-114x114.png deleted file mode 100644 index 36c167e..0000000 Binary files a/icons/apple-touch-icon-114x114.png and /dev/null differ diff --git a/icons/apple-touch-icon-120x120.png b/icons/apple-touch-icon-120x120.png deleted file mode 100644 index 9f2e92b..0000000 Binary files a/icons/apple-touch-icon-120x120.png and /dev/null differ diff --git a/icons/apple-touch-icon-144x144.png b/icons/apple-touch-icon-144x144.png deleted file mode 100644 index c9a90fa..0000000 Binary files a/icons/apple-touch-icon-144x144.png and /dev/null differ diff --git a/icons/apple-touch-icon-152x152.png b/icons/apple-touch-icon-152x152.png deleted file mode 100644 index 4878b63..0000000 Binary files a/icons/apple-touch-icon-152x152.png and /dev/null differ diff --git a/icons/apple-touch-icon-180x180.png b/icons/apple-touch-icon-180x180.png deleted file mode 100644 index c140d1a..0000000 Binary files a/icons/apple-touch-icon-180x180.png and /dev/null differ diff --git a/icons/apple-touch-icon-57x57.png b/icons/apple-touch-icon-57x57.png deleted file mode 100644 index 1416e49..0000000 Binary files a/icons/apple-touch-icon-57x57.png and /dev/null differ diff --git a/icons/apple-touch-icon-60x60.png b/icons/apple-touch-icon-60x60.png deleted file mode 100644 index 28b30c8..0000000 Binary files a/icons/apple-touch-icon-60x60.png and /dev/null differ diff --git a/icons/apple-touch-icon-72x72.png b/icons/apple-touch-icon-72x72.png deleted file mode 100644 index c3154bb..0000000 Binary files a/icons/apple-touch-icon-72x72.png and /dev/null differ diff --git a/icons/apple-touch-icon-76x76.png b/icons/apple-touch-icon-76x76.png deleted file mode 100644 index c3deffb..0000000 Binary files a/icons/apple-touch-icon-76x76.png and /dev/null differ diff --git a/icons/apple-touch-icon-precomposed.png b/icons/apple-touch-icon-precomposed.png deleted file mode 100644 index 0299f0a..0000000 Binary files a/icons/apple-touch-icon-precomposed.png and /dev/null differ diff --git a/icons/apple-touch-icon.png b/icons/apple-touch-icon.png deleted file mode 100644 index c140d1a..0000000 Binary files a/icons/apple-touch-icon.png and /dev/null differ diff --git a/icons/browserconfig.xml b/icons/browserconfig.xml deleted file mode 100644 index 570409a..0000000 --- a/icons/browserconfig.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - #303030 - - - diff --git a/icons/favicon-16x16.png b/icons/favicon-16x16.png deleted file mode 100644 index c932442..0000000 Binary files a/icons/favicon-16x16.png and /dev/null differ diff --git a/icons/favicon-32x32.png b/icons/favicon-32x32.png deleted file mode 100644 index a7a8983..0000000 Binary files a/icons/favicon-32x32.png and /dev/null differ diff --git a/icons/favicon-96x96.png b/icons/favicon-96x96.png deleted file mode 100644 index 493f658..0000000 Binary files a/icons/favicon-96x96.png and /dev/null differ diff --git a/icons/favicon.ico b/icons/favicon.ico deleted file mode 100644 index 00ea9c8..0000000 Binary files a/icons/favicon.ico and /dev/null differ diff --git a/icons/manifest.json b/icons/manifest.json deleted file mode 100644 index 849a981..0000000 --- a/icons/manifest.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "AnkiDroid Docs", - "icons": [ - { - "src": "\/android-chrome-36x36.png", - "sizes": "36x36", - "type": "image\/png", - "density": 0.75 - }, - { - "src": "\/android-chrome-48x48.png", - "sizes": "48x48", - "type": "image\/png", - "density": 1 - }, - { - "src": "\/android-chrome-72x72.png", - "sizes": "72x72", - "type": "image\/png", - "density": 1.5 - }, - { - "src": "\/android-chrome-96x96.png", - "sizes": "96x96", - "type": "image\/png", - "density": 2 - }, - { - "src": "\/android-chrome-144x144.png", - "sizes": "144x144", - "type": "image\/png", - "density": 3 - }, - { - "src": "\/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image\/png", - "density": 4 - } - ] -} diff --git a/icons/mstile-144x144.png b/icons/mstile-144x144.png deleted file mode 100644 index f1993ef..0000000 Binary files a/icons/mstile-144x144.png and /dev/null differ diff --git a/icons/mstile-150x150.png b/icons/mstile-150x150.png deleted file mode 100644 index 6b4dc09..0000000 Binary files a/icons/mstile-150x150.png and /dev/null differ diff --git a/icons/mstile-310x150.png b/icons/mstile-310x150.png deleted file mode 100644 index 928c129..0000000 Binary files a/icons/mstile-310x150.png and /dev/null differ diff --git a/icons/mstile-310x310.png b/icons/mstile-310x310.png deleted file mode 100644 index bedaa15..0000000 Binary files a/icons/mstile-310x310.png and /dev/null differ diff --git a/icons/mstile-70x70.png b/icons/mstile-70x70.png deleted file mode 100644 index b78a6aa..0000000 Binary files a/icons/mstile-70x70.png and /dev/null differ diff --git a/icons/safari-pinned-tab.svg b/icons/safari-pinned-tab.svg deleted file mode 100644 index fe86e17..0000000 --- a/icons/safari-pinned-tab.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - -Created by potrace 1.11, written by Peter Selinger 2001-2013 - - - - - diff --git a/manual-ar.asc b/manual-ar.asc deleted file mode 100644 index 93996d9..0000000 --- a/manual-ar.asc +++ /dev/null @@ -1,1350 +0,0 @@ -:docinfo1: -[.rtl] -:toc: -:experimental: - -= دليل استخدام أنكيدرويد 2.15 -:sectanchors: - -== مقدمة - -شكرًا لك على استخدام أنكيدرويد، نسخة الأندرويد من نظام التكرار المتباعد الشهير -http://ankisrs.net/[أنكي]. - -أنكي هو نظام يوظف تقنية التكرار المتباعد وهي تقنية بسيطة لكن فعالة جدًا. -إنها تساعدك على تذكر المعلومات عن طريق تكرارها تلقائيًا على فواصل زمنية متصاعدة -اعتمادًا على أجوبتك بدون أن تحتاج لتعقب ما تدرسه ومتى تدرس. -تنشئ «ملحوظات» (أو تنزل رزم مشاركة) بمحتوى تريد مذاكرته، ويتكفل المُجَدوِل -بإظهار المحتوى لك عندما تحتاج لذلك. - -أنكيدرويد معد للاستخدام بجانب نسخة الحاسوب. مع أنه يعمل بدونها، إلا أن بعض المهام -ممكنة في نسخة الحاسوب فقط أو أكثر فعالية بكثير هناك. -كما *ينصح بقوة* بقراءة قسم https://docs.ankiweb.net/#/getting-started?id=key-concepts[«مفاهيم أساسية»] -في دليل أنكي الرئيسي على الأقل لفهم المصطلحات المستخدمة هنا. - -إذا لم يكن هذا الدليل يحتوي على ما تبحث عنه، اطلع على https://github.com/ankidroid/Anki-Android/wiki[ويكي أنكيدرويد] -لقائمة التغييرات، وتعليمات إرسال تقارير الأعطال، وطلبات الميزات، وقائمة أسئلة متكررة، والمزيد. - -[[gettingStarted]] -== البدء -للبدء باستخدام أنكيدرويد، تحتاج إلى إضافة بعض البطاقات لتدرسها. في القائمة الرئيسية، -يسمح لك النقر على زر الزائد الكبير بإضافة «ملحوظة» جديدة (إنشاء بطاقات جديدة)، -أو تنزيل رزم مشتركة (رزم أنشأها ناس آخرون وشاركوها على الإنترنت)، أو إنشاء رزم جديدة فارغة. - -الرجاء مشاهدة هذا https://www.youtube.com/watch?v=F2K1gOSdIZA[الفيديو التعليمي] المكون من 5 دقائق، -والذي يعرفك بإضافة البطاقات وتنزيلها ودراستها في أنكيدرويد. هناك معلومات مفصلة أكثر في الأقسام في الأسفل. - -إذا كنت تستخدم نسخة الحاسوب وتريد استيراد رزمك من الحاسوب، فقد ترغب في التخطي مباشرة -إلى قسم <>. - -[[deckPicker]] -== قائمة الرزم -*_ملاحظة:_* يفترض هذا القسم أنك تفهم معنى https://docs.ankiweb.net/#/getting-started?id=key-concepts[الرزم والبطاقات]_ - -قائمة الرزم هي ما تراه عندما تبدأ أنكيدرويد. إنها تعرض قائمة رزم تحوي كل بطاقاتك، -وتسمح لك بتنفيذ عدة إجراءات: - -++++++++++ - -++++++++++ - -=== زر الإضافة -يُستخدم زر + الأزرق في أسفل اليمين لإضافة محتوى إلى أنكيدرويد. يؤدي الضغط عليه إلى إظهار الخيارات -الثلاث التالية المشروحة في https://www.youtube.com/watch?v=F2K1gOSdIZA[الفيديو]. - -إضافة :: اختر هذا الخيار إذا كنت تريد إنشاء بطاقات استذكار خاصة بك (ملحوظات) في أنكيدرويد. -كلمتا «ملحوظات» و «بطاقات» لها معاني محددة في أنكي، وهي مشروحة في https://docs.ankiweb.net/#/getting-started?id=key-concepts[دليل أنكي الرئيسي]. -شاهد الفيديو في الأعلى لمقدمة سريعة لإضافة الملحوظات، أو اطلع على قسم <> في الأسفل لتفاصيل أكثر. - -الحصول على رزم مشتركة :: ينزل رزمة بطاقات من الإنترنت شاركها مستخدم آخر - . تأكد من أنك متصل بالإنترنت. - . انقر + ثم *الحصول على رزم مشتركة* ليفتح أنكي ويب. - . اختر فئة، أو أدخل عبارة بحث. - . انقر *Info* على رزمة تريد دراستها. - . اسحب للأسفل وانقر *Download*. - . سينزل متصفح الويب الملف ويعرض تنبيه «اكتمل التنزيل». - انقر هذا الزر. - . سيظهر أنكيدرويد، وتظهر نافذة تأكيد. انقر زر *إضافة*. - . عند اكتمال الاستيراد، يجب أن تكون رزمتك جاهزة للدراسة. - -إنشاء رزمة :: ينشئ رزمة جديدة فارغة - . انقر زر + واختر «إنشاء رزمة» - . اختر اسمًا للرزمة، «ياباني جديد» مثلًا - . أضف بطاقات إليها حسب تعليمات «إضافة» في الأعلى - -=== شريط التطبيق -في أعلى الشاشة في أنكيدرويد هناك شريط تطبيق يحتوي أزرار لتنفيذ عدة إجراءات. -الإجراءات التالية متوفرة في شريط التطبيق في قائمة الرزم: - -زر قائمة التنقل :: يؤدي النقر على الأيقونة في أقصى اليسار إلى إظهار <> -للتنقل السريع بين الأقسام الرئيسية من التطبيق. - -زر المزامنة :: الزر الدائري الذي له أسهم على اليمين هو لمزامنة بطاقاتك مع السحابة، -كما هو مشروح في قسم <>. - -زر القائمة المنسدلة :: في أقصى اليمين هناك قائمة منسدلة تحوي إجراءات مستخدمة بشكل أقل. -هذه الإجراءات مشروحة في الأسفل. - -**إرشاد:** يؤدي النقر المطول على أي مكان في شريط التطبيق إلى إظهار تلميح نصي -يصف وظيفة الزر! - -=== دراسة رزمة -لدراسة بطاقات رزمة، انقر على اسم الرزمة (أو زر «دراسة» في الأجهزة اللوحية التي حجمها 10 بوصات)، لينتقل أنكيدرويد إلى وضع الدراسة. - -لاحظ أن الرزمة المحددة حاليًا معلّمة بخلفية رمادية، وإذا كان لديك أي <> -فستُعلَّم بلون خط أزرق. الرزم المفلترة مشروحة في قسم آخر من هذا الدليل. - -=== إجراءات الرزمة الأخرى -يؤدي النقر المطول على رزمة إلى إظهار قائمة الإجراءات الأخرى التي يمكن إجراؤها على تلك الرزمة: - -إعادة تسمية :: استخدم هذا الخيار لإعادة تسمية الرزمة - -خيارات الرزمة :: يسمح لك النقر على خيارات الرزمة بضبط عدة خيارات دراسة مخصوصة بالرزمة. -انظر https://docs.ankiweb.net/#/deck-options?id=deck-options[دليل الحاسوب] لمزيد من المعلومات -عن هذه الخيارات. - -دراسة مخصصة :: يسمح لك باختيار إعدادات مضبوطة مسبقًا للدراسة خارج الجدول المعتاد، مثل رفع حد الدراسة لذلك اليوم. -انظر قسم <> لمعلومات أكثر. - -حذف الرزمة :: استخدم هذا الخيار لحذف الرزمة (ملاحظة: لا يمكن التراجع عن هذا الخيار، لكن تستطيع <>) - -تصدير الرزمة :: يمكن استخدام هذا الخيار لمشاركة رزمة مع المستخدمين الآخرين. انظر قسم <> لمزيد من المعلومات. - -نكش :: هذا الخيار مرئي فقط عندما تحتوي الرزمة المحددة على بطاقات مدفونة يدويًا أو تلقائيًا. - -إعادة إنشاء / إفراغ :: إذا كانت الرزمة المحددة <>، يسمح لك هذا الخيار -بإعادة إنشائها أو إفراغها من البطاقات. - -==== المناطق التي يمكن النقر عليها في الرزم -لكل رزمة في القائمة ثلاث مناطق يمكن النقر عليها: - -مُوسِع الرزمة :: إذا كنت تستخدم https://docs.ankiweb.net/#/getting-started?id=decks[الرزم الفرعية]، -فقد يظهر زر إيساع في أقصى يسار الرزمة، والذي يمكن استخدامه لإظهار الرزم الفرعية وإخفائها. -أيقونة ▶ تعني أن للرزمة رزمًا فرعية يمكن إظهارها، وأيقونة ▼ تعني أن للرزمة رزمًا فرعية يمكن إخفاؤها، -وعدم وجود أيقونة يعني أن الرزمة ليس لها رزم فرعية. ملاحظة: يمكن إنشاء الرزم الفرعية باستخدام طريقة التسمية "والد::فرعي". - -اسم الرزمة :: هذه المنطقة الرئيسية القابلة للنقر، والتي تأخذك إلى شاشة الدراسة إذا كان هناك بطاقات لتراجعها. - -أزرار العد :: أزرار العد في أقصى يمين كل رزمة هي بمثابة منطقة منفصلة قابلة للنقر تأخذك إلى موجز الرزمة -بدلًا من شاشة الدراسة. هذا مفيد إذا كنت تريد الاطلاع السريع على عدد البطاقات المتوفرة في الرزمة. - -=== إجراءات متقدمة -بعض الإجراءات الإضافية الأقل استخدامًا موجودة في القائمة المنسدلة، وهي مختصرة كالتالي: - -تراجع :: بعد مراجعة البطاقة الأخيرة في جلسة دراسة، تستطيع التراجع عنها من هنا. - -فحص قاعدة البيانات :: يمكن لهذا أن يصلح كثيرًا من مشاكل قاعدة البيانات، كما يحذف أي وسوم غير مستخدمة. -إذا واجهت أي مشكلة في مجموعتك، فهذا أول شيء عليك تجربته. - -ملاحظة: تحت بعض الظروف، تنقل هذه الميزة البطاقات إلى رزمة تدعى _!Recovered Cards_. -إذا حدث هذا، انقل البطاقات إلى رزمتها المناسبة من خلال <> -واحذف رزمة _!Recovered Cards_ بعد أن تفرغ. - -فحص الوسائط :: جرب هذا إذا واجهت أي مشكلة عند مزامنة الوسائط. - -البطاقات الفارغة :: يحذف البطاقات الفارغة من مجموعتك. انظر https://docs.ankiweb.net/#/templates/generation?id=card-generation-amp-deletion[دليل الحاسوب] -لمزيد من المعلومات. - -استعادة من نسخة احتياطية :: يسمح لك باستعادة واحدة من <>. - -إدارة أنواع الملحوظات :: يسمح لك بإضافة أنواع الملحوظات، وتعديلها، وحذفها. -انظر قسم <> لمزيد من المعلومات حول هذه الميزة المتقدمة. - -استيراد :: يستورد ملف أنكي .apkg يحتوي رزمة. انظر قسم <> لمزيد من المعلومات. - -تصدير المجموعة :: يصدر كل مجموعتك كملف collection.apkg. انظر قسم <> لمزيد من المعلومات. - -=== عدادات الرزم -هناك ثلاث أرقام بجانب كل رزمة. يشير الرقم الأزرق على اليسار إلى عدد البطاقات الجديدة -التي عليك تعلمها اليوم. يعرض أنكي 20 بطاقة جديدة كل يوم بشكل افتراضي، وتستطيع تغيير -هذا إذا أردت. يشير الرقم الأحمر في الوسط إلى البطاقات المستحقة للدراسة اليوم والتي هي -في طور التعلم، ويشير الرقم الأخضر إلى البطاقات المستحقة للمراجعة (البطاقات التي -تخرجت من طور التعلم). في رزمة لم تدرسها من قبل أبدًا، سيكون كلا الرقمان الأخيران صفرًا. - -كما هو موضح في الأعلى، يؤدي النقر على العدادات إلى أخذك إلى شاشة موجز الرزمة. - -[[drawer]] -== قائمة التنقل -++++++++++ - -++++++++++ - -يمكن فتح قائمة التنقل من أغلب المناطق في التطبيق بالضغط على أيقونة القائمة اليسرى، -أو بالسحب من الجانب الأيسر من الشاشة. تستخدم القائمة للتنقل السريع بين أقسام مختلفة -من التطبيق. تستطيع التنقل إلى الشاشات التالية: - -الرزم :: يأخذك إلى الشاشة الرئيسية من التطبيق حيث تُعرض قائمة البطاقات. -انظر <> لمزيد من المعلومات. -متصفح البطاقات :: يظهر قائمة كل بطاقاتك. انظر (<>) لمزيد من المعلومات. -الإحصائيات :: يساعدك على تعقب تقدم دراستك. انظر (https://docs.ankiweb.net/#/stats?id=statistics[دليل أنكي] -أو قسم <<الإحصائيات المتقدمة,here>> لمزيد من المعلومات. -الوضع الليلي :: يحوّل التطبيق إلى الوضع الليلي والذي يجده كثير من المستخدمين أقل إجهادًا للعيون، -خصوصًا عند المراجعة في الظلام. انظر -https://github.com/ankidroid/Anki-Android/wiki/Advanced-formatting#customize-night-mode-colors[الويكي] -لكيفية تخصيص خلفية البطاقات ولون الخط في الوضع الليلي. -الإعدادات :: يسمح لك بتخصيص التطبيق. انظر <<الإعدادات,more info here>> لمزيد من المعلومات. -مساعدة :: يفتح صفحة الويب هذه. -إرسال الآراء والاقتراحات :: الحصول على الدعم من فريق أنكيدرويد. - -[[deckOverview]] -== شاشة موجز الرزمة -++++++++++ - -++++++++++ -في قائمة الرزم، إذا ضغطت على منطقة العدادات ستنتقل إلى شاشة موجز الرزمة. -تظهر هذه المنطقة على يمين قائمة الرزم دائمًا في الأجهزة اللوحية. - -تستطيع رؤية موجز للرزمة هنا، وإنشاء جلسات دراسة مخصصة، وإعادة إنشاء / إفراغ الرزم المفلترة، وتغيير خيارات الرزمة. -يأخذك زر الدراسة عندما يكون مرئيًا إلى شاشة الدراسة لتلك الرزمة. - -=== شريط التطبيق -تعتمد الأيقونات التي تظهر هنا على ما إذا كانت الرزمة عادية أم مفلترة. - -==== الرزم العادية - -الدراسة المخصصة :: يسمح لك الضغط على أيقونة المفتاح بإنشاء جلسة مخصصة، للمراجعة الإضافية خارج -الجدول المعتاد، أو دراسة بطاقات معينة فقط مثلًا. انظر قسم <> لمزيد من المعلومات. - -==== الرزم المفلترة - -إفراغ الرزمة :: يؤدي النقر على زر الضرب إلى إفراغ كل البطاقات في الرزمة المفلترة الحالية (يعيدها إلى رزمها الأصلية). - -إعادة إنشاء الرزمة :: يؤدي النقر على زر إعادة إنشاء إلى إعادة إنشاء الرزمة المفلترة الحالية -بناءً على الإعدادات المخصصة في خيارات الرزمة المفلترة. - -==== القائمة المنسدلة - -خيارات الرزمة :: تسمح لك بإعداد بعض الخيارات المتعلقة بالرزمة الحالية، مثل عدد البطاقات الجديدة -والمراجعات التي تعرض كل يوم. -الرجاء الاطلاع على https://docs.ankiweb.net/#/deck-options?id=deck-options[دليل الحاسوب] -لمزيد من المعلومات حول هذه الخيارات. - -نكش :: هذا الخيار مرئي فقط عندما يكون في الرزمة بطاقات مدفونة يدويًا أو تلقائيًا. - -[[reviewer]] -== شاشة الدراسة -يؤدي الضغط على اسم رزمة في قائمة الرزم أو زر الدراسة في شاشة موجز رزمة إلى أخذك إلى شاشة الدراسة. -++++++++++ - -++++++++++ - -=== الأساسيات -إذا لم تستخدم أنكي على الحاسوب من قبل، فقد ترغب في الاطلاع على -https://docs.ankiweb.net/#/getting-started?id=videos[الفيديو التعريفي] -أولًا قبل متابعة القراءة، لأنه يشرح عملية المراجعة الأساسية. - -في أعلى اليسار هناك ثلاث أعداد والتي تدل على البطاقات الجديدة وبطاقات التعلم وبطاقات المراجعة من اليسار. -هذه الأعداد مشروحة بتفصيل أكثر في الفيديوهات التعريفية لبرنامج الحاسوب، -لذلك يرجى https://docs.ankiweb.net/#/getting-started?id=videos[الاطلاع عليها]. - -بعد أن تطّلع على سؤال بطاقة، وتتذكر جوابه أو تقرر أنك لا تعرفه، انقر زر «إظهار الجواب». -عندما تفعل، ستتغير المنطقة السفلية لإظهار 2-4 زر إجابة، اعتمادًا على إجاباتك السابقة للبطاقة. -تظهر الأزرار الوقت الذي ستظهر فيه البطاقة في المرة القادمة، لذلك فـ 10د تعني «10 دقائق» -و 5 ي تعني «5 أيام». تستطيع النقر على هذه الأزرار لاختيار جواب. - -لجعل المراجعة أسهل، تستطيع إعداد إيماءات (مثل النقر والسحب) للإجابة عن البطاقات -بدون استخدام الأزرار. انظر قسم <> لمزيد من المعلومات حول إعداد الإيماءات. - -=== شريط التطبيق -لشريط التطبيق أعلى شاشة الدراسة عدة أزرار لتنفيذ إجراءات شائعة عديدة. -يُحدَّد عدد الأزرار المعروضة تلقائيًا بناءً على حجم شاشتك ودقتها. إذا لم يكن هناك مساحة كافية -لإظهار زر إجراء ما، فسيكون الإجراء متوفرًا في القائمة بدلًا من ذلك. إذا لم تكن متأكدًا مما يفعله زر ما، -تستطيع الضغط المطول عليه لإظهار اسم الإجراء. تتوفر الإجراءات التالية: - -تراجع :: يتراجع عن الجواب الذي اخترته للبطاقة الأخيرة (يظهر الزر دائمًا). -تعليم البطاقة :: يضيف وسم "marked" (مُعلَّم) إلى الملحوظة الحالية لتسهيل إيجادها من خلال المتصفح. -هذا مفيد عندما تريد تنفيذ إجراء على الملحوظة لاحقًا، مثل البحث عن معنى كلمة عندما تعود إلى المنزل. -تظهر البطاقات المعلمة نجمًا صغيرًا في الزاوية العليا اليمنى عند المراجعة. -تأشير البطاقة :: يضيف «مؤشرًا» ملونًا (أحمر، برتقالي، أخضر، أزرق). يمكن استخدام هذا كعلامة عامة -للتفريق بين بطاقاتك. المؤشرات ممثلة بأرقام من 1 إلى 4، تدل على الألوان السابقة. -تحرير البطاقة :: يفتح شاشة تحرير الملحوظة، حيث تستطيع تغيير المحتوى المعروض في البطاقة. -(اطلع على قسم <>) للمساعدة. -إخفاء / حذف :: يوفّر خيارات لدفن الملحوظة الحالية أو البطاقة، أو تعليقها، أو حذفها. - -- **دفن البطاقة / دفن الملحوظة: ** يخفي البطاقة أو كل بطاقات الملحوظة من المراجعة -حتى اليوم التالي. (إذا أردت نكش البطاقات قبل ذلك، تستطيع اختيار «نكش» من قائمة النقر المطول -في <>، أو <>.) -هذا مفيد عندما لا تستطيع الإجابة عن بطاقة الآن أو تريد العودة إليها لاحقًا. يمكن أن يحدث الدفن -تلقائيًا للبطاقات من الملحوظة نفسها. إذا كانت البطاقات في طور التعلم عند دفنها، -فستُنقل إلى صف البطاقات الجديدة أو المراجعات قبل دفنها. -- **تعليق البطاقة / تعليق الملحوظة: ** يخفي بطاقة أو كل بطاقات الملحوظة من المراجعة حتى يتم -تفعيلها يدويًا (بالنقر المطول على بطاقة في <<المتصفح, card browser>>). -هذا مفيد إذا كنت تريد تجنب مراجعة الملحوظة لبعض الوقت، لكنك لا تريد حذفها. إذا كانت البطاقات -في طور التعلم عند تعليقها، فستُنقل إلى صف البطاقات الجديدة أو المراجعات قبل تعليقها. -- **حذف الملحوظة: ** يحذف الملحوظة وكل بطاقاتها. - -إعادة تشغيل الصوت :: إذا كانت البطاقة تحتوي على صوت في الأمام أو الخلف، فسيُشغَّل مجددًا. -تفعيل / إيقاف السبورة :: هذا الإجراء يفعّل أو يوقف ميزة السبورة للرزمة الحالية. تسمح لك ميزة -السبورة بالرسم على الشاشة. هذا مفيد خصوصًا للتمرن على رسم أحرف لغات مثل اليابانية. -عند تفعيل السبورة للرزمة الحالية، يصبح إجراءان جديدان متوفرين لمسح السبورة وإخفائها. -إيقاف السبورة يخفي هذين الإجراءين بالإضافة إلى السبورة نفسها. -خيارات الرزمة :: يفتح خيارات خاصة بالرزمة. انظر https://docs.ankiweb.net/#/deck-options?id=deck-options[دليل الحاسوب] -لمزيد من المعلومات حول هذه الخيارات. -تحقق من النطق :: هذا الإجراء يفعل أو يوقف شريط مسجل الصوت المؤقت في أعلى البطاقة. -تسمح لك هذه الميزة بتسجيل صوتك وتشغيله. تُستخدم بشكل رئيسي للتحقق من النطق. -يتألف هذا الشريط من ثلاث أزرار: تشغيل، وإيقاف، وتسجيل من الميكروفون. -يمكن استخدام هذه الأداة عند رؤية السؤال أو الجواب. - -=== بلوغ نهاية جلسة الدراسة -عندما تنهي البطاقات المستحقة اليوم، فستُنقل إلى قائمة الرزم وتظهر لك رسالة تهنئة. -تستطيع عندها اختيار رزمة أخرى، أو إذا انتهيت من الدراسة اليوم، تستطيع إغلاق أنكيدرويد -بالضغط على زر «الهوم» الخاص بهاتفك (تستطيع فعل هذا أثناء المراجعة إذا أردت). - -إذا كنت تريد الاستمرار بدراسة الرزمة نفسها، انقر على الرزمة مجددًا لتظهر لك عدة خيارات لاستكمال الدراسة. -انظر قسم <> لمزيد من المعلومات حول الدراسة المخصصة. - - -[[addingNotes]] -== شاشة إضافة ملحوظة -*_ملاحظة:_* _يفترض هذا القسم وما بعده أنك تفهم معنى -https://docs.ankiweb.net/#/getting-started?id=notes-amp-fields[الملحوظات، والحقول، وقوالب البطاقات، وأنواع الملحوظات]_. - -لإضافة ملحوظة جديدة، انقر زر + أسفل قائمة الرزم واختر «إضافة». -++++++++++ - -++++++++++ - -تتوفر الميزات التالية في شاشة إضافة ملحوظة: - -النوع :: يسمح لك باختيار نوع الملحوظة التي تريد إضافتها. -إن نوع «أساسي» يفي بالغرض في معظم الأحيان، لكن إذا كنت تريد بطاقة إضافية معكوسة مثلًا -(تظهر حقل «خلف» أمام البطاقة)، تستطيع اختيار نوع ملحوظة «أساسي (مع بطاقة معكوسة)». - -الرزمة :: يسمح لك بتغيير الرزمة التي ستضاف إليها البطاقات. - -الحقول :: أسفل مُحدِّد الرزمة هناك حقول الملحوظة (مثلًا لحقل ملحوظة «أساسي» حقلي «أمامي» و«خلفي»). -عند النقر على حقل، تظهر لوحة مفاتيح تسمح لك بإدخال معلومات. - -أزرار الوسائط :: بجانب كل حقل هناك أيقونة إرفاق تسمح لك بإضافة وسائط إلى ملحوظتك -(هذه الميزة في الطور التجريبي حاليًا). زر إضافة صورة يسمح لك بإضافة صور من خلال كاميرا جهازك -(إذا كانت متوفرة)، أو من خلال مكتبة الصور. خيار تسجيل الصوت يسمح لك بتسجيل صوتك -ووضعه في حقل. يسمح لك المحرر المتقدم بالبحث عن ترجمات أو ملفات نطق على الإنترنت. - -الوسوم :: يفتح نافذة تسمح لك بإضافة الوسوم وحذفها من الملحوظة. - -البطاقات :: يظهر أسماء البطاقات التي ستُولَّد من نوع الملحوظة المحدد. يؤدي النقر على هذا الزر -إلى فتح نافذة تسمح لك بمعاينة الشفرة المصدرية لقالب بطاقة النوع المحدد. من هناك تستطيع تحرير -القوالب ومعاينتها وإضافتها وحذفها. انظر قسم -https://docs.ankiweb.net/#/templates/intro?id=card-templates[البطاقات والقوالب] -في دليل أنكي للحاسوب لمزيد من المعلومات حول قوالب البطاقات. - -اضغط ضغطًا مطولًا في حقل ما لإضافة عبارة ملء فراغات حول النص المحدد، أو عبارة فارغة إذا لم يكن هناك نص محدد. - -بعد الانتهاء من إدخال محتويات الملحوظة، انقر زر علامة صحيح في شريط التطبيق في الأعلى -لإضافتها إلى مجموعتك. أو كبديل، إذا أردت الرجوع إلى ما كنت تفعله بدون الحفظ، تستطيع النقر على -أيقونة التطبيق أو زر الرجوع. - -[[noteFormattingToolbar]] -=== شريط أدوات تنسيق الملحوظات - -يحتوي شريط أدوات تنسيق الملحوظات على أزرار تنسيق نصوص أساسية (خط غامق، خط مائل، خط سفلي، خط أفقي، إضافة عنوان، تغيير حجم الخط، <>، وإضافة عبارات ملء الفراغات). - -ويسمح أيضًا بإضافة أزرار جديدة معرفة من قبل المستخدم باستخدام HTML. HTML هي لغة قوية تسمح بتخصيص لا حدود له لبطاقاتك. https://github.com/ankidroid/Anki-Android/wiki/Note-Editor-Toolbar-HTML-Samples[الويكي] تحتوي على بعض عينات الكود الشائعة كبداية. - -يمكن حذف زر معرف من قبل المستخدم بالضغط المطول على الزر واختيار «حذف». - -[[editingNotes]] -== شاشة تحرير الملحوظة -يمكن فتح شاشة التحرير باختيار تحرير عند المراجعة، أو بفتح البطاقة في المتصفح. -شاشة التحرير مشابهة لشاشة الإضافة المذكورة في الأعلى، مع بعض الاختلافات الجوهرية: - - - * يعمل تغيير الرزمة على البطاقة المحددة (التي تحتها خط في صندوق «البطاقات»). - إذا كان لنوع ملحوظة أكثر من بطاقة، فقط البطاقة المحددة حاليًا تُنقل إلى الرزمة الجديدة. - - * تغيير قائمة «النوع» المنسدلة ينقلك إلى وضع تغيير نوع الملحوظة. في هذا الوضع، لا يُسمح - بتعديل محتوى الملحوظة (الزرمة، والحقول، إلخ)، وإذا كان نوع ملحوظة مخصص بأكثر من حقلين مستخدمًا، - فستظهر أزرار إضافية تسمح لك بالتحكم بتوزيع الحقول إلى نوع الملحوظة الجديد. - -إذا كان لنوع الملحوظة المحدد بطاقات أقل من النوع السابق، فسيُحتفظ بالبطاقات الأولى فقط. -على سبيل المثال، تغيير النوع من «أساسي (مع بطاقة معكوسة)» إلى «أساسي» يؤدي إلى -إبقاء البطاقة الأولى فقط. لتحذيرك حول هذا، سيظهر النص في منطقة «البطاقات» بلون أحمر، -وستُعرض نافذة تأكيد قبل حفظ الملحوظة. - - إرشاد: لتغيير نوع عدة ملحوظات في دفعة واحدة، أو لتخصيص توزيع البطاقات، استخدم -خيار «تغيير نوع الملحوظة» في المتصفح في نسخة الحاسوب. - -تتوفر أيضًا عدة خيارات متقدمة في القائمة الرئيسية: - -إضافة ملحوظة :: إنشاء ملحوظة جديدة فارغة. -نسخ البطاقة :: نسخ الملحوظة الحالية إلى ملحوظة جديدة يمكن تحريرها. -إعادة تعيين التقدم :: ينقل البطاقة إلى نهاية صف البطاقات الجديدة. تُمسح حالة البطاقة الحالية، لكن ليس سجل مراجعاتها. -إعادة جدولة :: يسمح لك بإعادة الجدولة كبطاقة مراجعة في تاريخ محدد. هذا مفيد إذا استوردت مواد تعلمتها من قبل، -وتريد البدء بها بفواصل أولية أكبر. - -[[browser]] -== البحث/التصفح -تستطيع البحث عن بطاقات أو تصفحها بالنقر على زر «متصفح البطاقات» في <>. - -++++++++++ - -++++++++++ - -تبدأ نافذة المتصفح بإظهار كل البطاقات في الرزمة المحددة حاليًا. تستطيع البحث عن بطاقات في الرزمة المحددة -بالنقر على أيقونة العدسة المكبرة في الأعلى. تستطيع تغيير الرزمة المحددة (أو التغيير إلى كل الرزم) -باختيار الرزمة من القائمة المنسدلة في أعلى اليسار. - -بشكل افتراضي، العمود الأول في المتصفح يعطي النص الذي سيظهر في السؤال (الجانب الأمامي) من البطاقة، -والعمود الثاني يظهر نص الجواب (الجانب الخلفي) من البطاقة. - -يمكن ضبط العمود الأول لإظهار https://docs.ankiweb.net/#/editing?id=customizing-fields[«حقل الفرز»] -لعرض أكثر إيجازًا. يمكن ضبط العمود الثاني لإظهار عدة متغيرات بالنقر على القائمة المنسدلة في عنوان العمود. - -لاحظ أن محتوى العمودات يُحسب بشكل ديناميكي أثناء تنقلك بين قائمة البطاقات. - -من نتائج البحث، يمكنك النقر على بطاقة لتحريرها (انظر قسم <> في الأعلى)، -أو النقر المطول على بطاقة لإظهار قائمة تسمح لك بتنفيذ الإجراءات التالية: - -تعليم / إلغاء تعليم الملحوظة :: إضافة / حذف وسم "marked" من الملحوظة. تلون بطاقات الملحوظات المعلمة بلون بنفسجي. -تأشير البطاقة :: تغيير «المؤشر» الملون على البطاقة أو حذفه. تلون البطاقات المؤشرة بلون مؤشرها. -تعليق / تفعيل البطاقة :: تلون البطاقات المعلقة بلون أصفر، ولا تظهر خلال المراجعة. -حذف الملحوظة :: يحذف ملحوظة البطاقة المحددة وكل بطاقاتها. -لا يمكن الرجوع عن هذا الإجراء إلا <>. -معاينة :: معالجة البطاقة المحددة لكي تستطيع رؤية ما ستكون عليه عند مراجعتها. -تحديد بطاقات متعددة :: يؤدي النقر المطول على بطاقة واحدة إلى تحديد هذه البطاقة. -عندما تكون البطاقة محددة، وتنقر نقرًا مطولًا على بطاقة أخرى في الشاشة، فسيتم تحديد كل البطاقات -بين البطاقة الأولى والبطاقة الأخيرة. يسمح هذا بتنفيذ إجراءات على عدة بطاقات في الوقت نفسه. - -=== البحث -يدعم أنكيدرويد كل عبارات البحث المدعومة في نسخة الحاسوب، ما يسمح لك بإجراء بحوثات معقدة. بعض الأمثلة: - - tag:marked :: يظهر البطاقات التي لها وسم "marked" - is:due :: يظهر البطاقات التي بانتظار المراجعة فقط - أمام:أرنب :: يظهر البطاقات التي يحتوي حقلها الأمامي على «أرنب» فقط ولا غير -flag:1 :: يظهر البطاقات التي لها مؤشر أحمر فقط - -لقائمة كاملة بعبارات البحث الممكنة، اطلع على https://docs.ankiweb.net/#/searching?id=searching[دليل الحاسوب]. - -كبديل، يمكن تطبيق بعض الفلاتر الشائعة (البطاقات المعلمة، والمعلقة، والموسومة) بدون إدخالها يدويًا -باختيارها من القائمة المنسدلة. كما تستطيع حفظ عبارات بحث شائعة واسترجاعها من القائمة. - -[[filtered]] -== الرزم المفلترة - -أنكي مصمم لتعزيز عملية التعلم، بحيث تدرس لأقصر مدة كافية من أجل تذكر معظم بطاقاتك. -حالما تظهر شاشة التهنئة، تصبح الدراسة أكثر كحالة عوائد متناقصة: كمية الوقت التي تقضيها -بمذاكرة البطاقات نفسها مجددًا لا تستحق الزيادة البسيطة في مقدار تذكرك. - -مع ذلك، إذا كان لديك اختبار قريب، أو تريد تمضية بعض الوقت ببساطة، فمن الممكن الاستمرار -بالمراجعة حتى بعد ظهور شاشة التهنئة. - -«الرزمة المفلترة» هي رزمة مؤقتة تحتوي بطاقات بناءً على عدة معايير، مثل «منسي اليوم»، -أو «له سمة (صعب)»، وما إلى ذلك. بعد دراسة بطاقات في رزمة مفلترة، أو عند حذف الرزمة، -تعود البطاقات تلقائيًا إلى رزمها الأصلية. - -أسهل طريقة لإنشاء رزمة مفلترة هي بالضغط المطول على رزمة ثم اختيار خيار «دراسة مخصصة». - -يستطيع المستخدمون المتقدمون إنشاء رزمة مفلترة يدويًا باختيار «إنشاء رزمة مفلترة» من القائمة المنسدلة -في شاشة قائمة الرزم. - -لمزيد من المعلومات حول الرزم المفلترة، انظر https://docs.ankiweb.net/#/filtered-decks?id=filtered-decks-amp-cramming[دليل الحاسوب]. - -[[RTL]] -== استخدام اللغات المكتوبة من اليمين إلى اليسار في أنكيدرويد -لأنكي وأنكيدرويد دعم كامل للغات التي تكتب من اليمين إلى اليسار مثل العربية، والعبرية، والفارسية. - -=== تعديل الحقول من اليمين إلى اليسار -يمكن ضبط الحقول كحقول مكتوبة من اليمين إلى اليسار (حاليًا ممكن فقط من أنكي للحاسوب). عندما يضبط حقل بهذا الشكل، تتم محاذاة النص إلى اليمين في حقول التحرير وتظهر علامات الترقيم في آخر (يسار) الجمل بشكل صحيح. تُعرض النصوص التي تحوي على مجموعات حروف تكتب من اليسار إلى اليمين بشكل صحيح أيضًا. - -اتجاه النص مهم خصيصًا لتحرير عبارات ملء الفراغات التي تكتب من اليمين إلى اليسار وإنشائها، حيث إن صياغة هذه العبارات تحتوي على أحرف محايدة الاتجاه وأحرف تكتب من اليسار إلى اليمين في الوقت نفسه. لذلك ينصح باستخدام نوع ملحوظة مخصص لعبارات ملء الفراغات التي تكتب من اليمين إلى اليسار. - -=== عرض الحقول من اليمين إلى اليسار أثناء الدراسة -لعرض حقل من اليمين إلى اليسار، مع المحاذاة إلى اليمين والاتجاه المناسب، يجب إحاطة الحقل بعنصر div أو span مع تحديد اتجاه RTL: - -
- -[[AnkiDesktop]] -== استخدام أنكي للحاسوب مع أنكيدرويد -لأنكي خدمة مزامنة مجانية تدعى أنكي ويب تجعل من السهل مزامنة رزمك بين جهازك المحمول وحاسوبك. -إذا لم تكن قادرًا على استخدام المزامنة لسبب ما، من الممكن أيضًا استخدام فلاش USB، لكن هذه الطريقة مضنية أكثر. - -لاحظ أن أنكيدرويد ليس مرتبطًا بأنكي الحاسوب أو أنكي ويب. أنكيدرويد مبني على أنكي الحاسوب -لكنه مطور من قبل مجموعة منفصلة تمامًا من المتطوعين. - -++++++++++ - -++++++++++ - -=== عبر مزامنة السحابة -قبل أن تستطيع استخدام أنكي ويب، عليك إنشاء حساب من خلال زيارة https://ankiweb.net -والضغط على زر *Sign Up*. تستطيع تخطي هذه الخطوة إذا استخدمت أنكي ويب من قبل. -بعد إنشاء حساب، انظر التعليمات في الأسفل اعتمادًا على ما إذا كنت تريد جلب رزمك الموجودة إلى أنكيدرويد، -أو خارج أنكيدرويد. - -==== مزامنة الرزم الموجودة إلى تنصيب أنكيدرويد جديد -في هذا السيناريو، لديك رزم موجودة تريد نسخها إلى تنصيب جديد من أنكيدرويد بالمزامنة مع أنكي ويب. -افتح نسخة أنكي التي فيها رزمك (تكون هذه عادة نسخة الحاسوب، لكنها قد تكون نسخة أنكيدرويد كنت تستخدمها في جهاز آخر)، -وانقر زر مزامنة (له سهمان في دائرة) في أعلى اليمين من قائمة الرزم. - -إذا لم تستخدم أنكي ويب من قبل، فستحتاج إلى إدخال بياناتك إذا طُلبت منك، ثم الضغط على -«رفع إلى أنكي ويب» لتأكيد استبدال المجموعة الخالية في أنكي ويب برزمك الموجودة في أنكي. -سيرفع أنكي كل البطاقات، والصور، والملفات الصوتية إلى أنكي ويب. قد يستغرق هذا بعض الوقت إذا كان لديك كثير من الوسائط. - -حالما تنتهي المزامنة، افتح أنكيدرويد في الجهاز الذي تريد نسخ الرزم إليه،وانقر زر «مزامنة» -في شريط التطبيق في أعلى <>. -بعد إدخال بيانات أنكي ويب، سينزل أنكيدرويد كل بطاقاتك والوسائط، ويتذكر معلومات الدخول للمرات القادمة. - -لاحظ أنه إذا كان لديك مواد في أنكيدرويد قبل محاولة المزامنة، فقد تظهر لك رسالة تسألك أن تختار إما -التنزيل من أنكي ويب، أو الرفع إلى أنكي ويب. إذا لم يكن هناك بأس في خسران البطاقات في أنكيدرويد، -فاضغط *تنزيل*. إذا كنت تريد دمج البطاقات الموجودة مع أنكيدرويد، فانظر قسم -<> قبل الاستمرار. - -بعد اكتمال المزامنة الأولى، تستطيع ضغظ زر المزامنة وقتما أردت مزامنة التغييرات إلى السحابة. -يتم إرسال التغييرات المجراة منذ آخر مزامنة فقط، لذلك فعمليات المزامنة التالية أسرع بكثير. - -إذا أضفت بعض البطاقات الجديدة في نسخة الحاسوب وتريد مزامنتها إلى أنكيدرويد، -فستعيد العملية نفسها: زامن على الحاسوب (أو أغلق البرنامج، لأنه يزامن تلقائيًا -عند الإغلاق بشكل افتراضي)، ثم انقر زر مزامنة في أنكيدرويد. - -==== المزامنة من أنكيدرويد إلى الحاسوب -عملية المزامنة من أنكيدرويد إلى الحاسوب هي جوهريًا مثل المزامنة من حاسوب إلى أنكيدرويد، لكن بشكل معكوس. - -من خلال <>، انقر زر «مزامنة» في أعلى اليمين (له سهمان في دائرة). -إذا كنت تستخدم أنكي ويب للمرة الأولى، فقد تحتاج إلى إدخال معلومات دخولك، ثم ضغظ زر «رفع» -لرفع مجموعة أنكيدرويد إلى أنكي ويب. - -بعد اكتمال المزامنة، افتح أنكي على حاسوبك واضغط زر مزامنة لتنزيل مجموعتك. - -[[AnkiWebConflicts]] -==== التعامل مع تعارضات الدمج في أنكي ويب -مع أن هذا لا يجب أن يحصل غالبًا، فقد يحصل أحيانًا أن تصبح بطاقاتك في أنكيدرويد -غير قابلة للدمج التلقائي مع البطاقات في أنكي ويب. في هذه الحالة، من الضروري الاختيار -فيما بين التحميل من أنكي ويب أو الرفع إليه، وهذا يستبدل مجموعة في طرف من الاثنين. - -إذا كان لديك بطاقات في كلا الجانبين تريد الاحتفاظ بها، تستطيع <> -لكل رزمة تحتوي بطاقات جديدة من أنكيدرويد، ثم عند المزامنة، الضغط على «تنزيل» للتنزيل من أنكي ويب. -بعد اكتمال المزامنة، تستطيع استيراد الرزم التي صدرتها مسبقًا من أنكيدرويد، -كما هو مشروح في قسم <>. - -=== عبر USB - -إذا لم يمكن لديك اتصال إنترنت منتظم، فمن الممكن نسخ الرزم بين أجهزتك باستخدام USB. - -تعمل طريقة USB باستيراد كل الرزم دفعة واحدة أو تصديرها. يعني هذا أنه عكس طريقة أنكي ويب، -لا تستطيع إجراء تغييرات في جانبين في الوقت نفسه ودمج هذه التغييرات. بدلًا من ذلك، -إذا أردت إضافة بطاقات في الحاسوب، فعليك التأكد من تصدير الإصدار الأخير من -مجموعتك في هاتفك المحمول أولًا، أو قد تخسر المراجعات المجراة على الهاتف. - -لذلك فالخطوات التي ستتبعها عادة هي تصدير مجموعتك من الهاتف واستيرادها إلى الحاسوب، -ثم إجراء تغييرات في الحاسوب وتصدير المجموعة واستيرادها إلى الهاتف. - -لا يدعم أنكيدرويد استيراد الملفات النصية مباشرة. إذا كنت تريد ذلك، فعليك فعله من خلال الحاسوب، -ثم استيراد مجموعتك إلى أنكيدرويد. - -==== نسخ كل الرزم من أنكي الحاسوب إلى أنكيدرويد بواسطة USB - -على حاسوبك: - - . افتح برنامج الحاسوب - . اختر عنصر القائمة ملف>تصدير. - . اضغظ زر «تصدير...». تأكد من إبقاء خيار «كل الرزم» محددًا، لأنه لا يمكن استيراد - رزم فردية إلى أنكيدرويد. يجب أن يكون خيار «تضمين معلومات الجدولة» محددًا أيضًا. - . سينشئ أنكي ملف collection.apkg تلقائيًا على حاسوبك. إذا كان للملف اسم مختلف، - انظر الخطوة السابقة مجددًا. - . صل جهاز الأندرويد بحاسوبك بكبل USB. - . افتح مستعرض الملفات في حاسوبك وعاين محتويات الهاتف. - . اعثر على مجلد AnkiDroid. - . اسحب ملف collection.apkg من حاسوبك إلى هذا المجلد. - -ثم في أنكيدرويد: - - . اضغظ «استيراد ملف» من القائمة في شاشة الرزم الرئيسية. - . انقر «مجموعة» ثم تأكيد - -بعد الانتهاء، تُستبدل الرزم في هاتفك بالرزم في حاسوبك. انظر قسم <> -لمزيد من المعلومات حول الاستيراد. - -==== نسخ كل الرزم من أنكيدرويد إلى أنكي الحاسوب بواسطة USB - -عملية نقل الرزم من أنكيدرويد إلى الحاسوب هي مثل الخطوات في الأعلى، لكن بشكل معكوس. - - . افصل جهازك من الـ USB. - . اختر «تصدير المجموعة» من القائمة الرئيسية في شاشة الرزم. - . تأكد من تحديد «تضمين معلومات الجدولة» ثم اضغط *موافق*. - . صل الجهاز إلى الحاسوب بواسطة USB. - . انسخ ملف collection.apkg من المسار الموصوف في الرسالة إلى حاسوبك. - . اضغط ضغطة مزدوجة على الملف لاستيراده إلى أنكي الحاسوب. - -انظر قسم <> في الأسفل لتفاصيل أكثر حول التصدير من أنكيدرويد. - -[[importing]] -== استيراد ملفات أنكي -تستطيع استيراد ملفات أنكي (بصيغة .apkg) مباشرة إلى أنكيدرويد. لا يمكن استيراد الصيغ الأخرى -مباشرة، لكن يمكن استيراد أغلب صيغ البطاقات الخاصة بالتطبيقات الأخرى على تسخة الحاسوب، -والتي تستطيع بعدها <>. -انظر قسم https://docs.ankiweb.net/#/importing?id=importing[التصدير في دليل الحاسوب] للمساعدة حول الاستيراد إلى أنكي الحاسوب. - -كما في نسخة الحاسوب، يميّز أنكيدرويد بين https://docs.ankiweb.net/#/exporting?id=exporting[نوعين من ملفات .apkg] -(«حزمة مجموعة» و «حزمة رزمة») بناءً على اسم الملف. لجزم المجموعات اسم "collection.colpkg"، -وعند استيرداها _تستبدل كل المحتوى_ الموجود في أنكيدرويد كليًا. أي ملف apkg لا ينتهي اسمه بـ ".colpkg" -يُعامل كحزمة رزمة، والتي _تُدمج مع أي محتوى موجود_ عند استيرادها إلى أنكيدرويد. - -تستطيع استيراد ملفات مجموعة أنكي .apkg إلى أنكيدرويد، إما بفتحها من خلال نظام أندرويد بالشكل المعتاد، -أو باستيرادها من داخل أنكيدرويد: - -=== فتح الملف بواسطة أندرويد -تُربَط ملفات Apkg تلقائيًا مع أنكيدرويد. على سبيل المثال، إذا فتحت ملف .apkg محلق مع بريد إلكتروني -أرسلته إلى نفسك، فسيفتح أنكيدريد هذا الملف تلقائيًأ ويسألك عما إذا كنت تريد استيراده. اضغظ موافق لاستيراد الملف. - -=== استيراد الملف يدويًا في أنكيدرويد -تستطيع استيراد ملفات .apkg يدويًا كالتالي: - - * اربط جهازك بالحاسوب بواسطة USB. - * انسخ ملف .apkg من حاسوبك إلى مجلد أنكيدرويد على هاتفك. - * افتح أنكيدرويد في هاتفك. - * اختر «تصدير» من القائمة الرئيسية في شاشة قائمة الرزم. - * اختر ملف apkg الذي نسخته إلى جهازك عندما يطلب منك ذلك. - * انقر موافق - -== استيراد قواعد بيانات أنكي (.anki2) - -لا يدعم أنكيدرويد استيراد ملفات قاعدة بيانات أنكي (`.anki2`) مباشرة. -استيراد قاعدة بيانات يستبدل مجموعتك بمحتوى الملف. إذا كنت تريد إجراء استبدال كامل، -فعليك استيراد ملف `collection[.apkg/.colpkg]` منشأ في التطبيق باستخدام ميزة التصدير. - -=== استيراد ملفات anki2 يدويًا - -هذا غير مدعوم رسميًا، لكن يمكن استيراد ملفات anki2 يدويًا عند الحاجة، في حالات الكشف عن المشاكل مثلًا: - -* أنشئ مجلدًا جديدًا على نظام ملفات أندرويد -* احصل على المسار الكامل للمجلد كما هو موفر من قبل مدير الملفات، يظهر هذا كـ: `/storage/emulated/0/<اسم_المجلد>` -* ضع ملف `.anki2` في المجلد الجديد -* أعد تسمية الملف إلى `collection.anki2` -* (إذا كان هذا صالحًا في حالتك) سجل الخروج من حساب أنكي ويب مؤقتًا: `إعدادات - أنكيدرويد - حساب أنكي ويب` -* افتح `إعدادات - خيارات متقدمة - مجلد أنكيدرويد` واضبط مجلد أنكيدرويد إلى المجلد الجديد. - -[[exporting]] -== تصدير ملفات أنكي -يستطيع أنكيدرويد تصدير البطاقات بصيغة .apkg بحيث يمكنك استيرادها إلى أنكي الحاسوب، أو مشاركتها مع الآخرين. -كما في نسخة الحاسوب، تستطيع إما تصدير https://docs.ankiweb.net/#/exporting?id=packaged-decks[حزمة مجموعة أو حزمة رزمة]، اعتمادًا على ما تريد فعله. - -يتوفر خيارا استيراد اثنان: «تضمين معلومات الجدولة» و «تضمين الوسائط». الخيارات الافتراضية كافية عمومًا. -إذا اخترت عدم تضمين ملفات معلومات الجدولة، فسيفترض أنكي أنك تريد مشاركة الرزمة مع أناس آخرين، وسيحذف -وسوم marked و leech لكي يحصل الآخرين على نسخة نظيفة. - -=== تصدير رزمة مجموعة -عند الاستيراد للاستخدام في أنكي الحاسوب، فقد تريد عمومًا -https://docs.ankiweb.net/#/exporting?id=collection-colpkg[استيراد المجموعة كاملة]، مع تضمين سجل المراجعة وكل شيء. - -من القائمة الرئيسية في شاشة الرزم: - - . انقر عنصر القائمة *تصدير* - . انقر *موافق* مع لاستخدام الخيارات الافتراضية - . انقر *موافق* مجددًا لإرسال الرزمة المصدرة ببريد إلكتروني إلى نفسك، أو كبديل، تستطيع نسخها يدويًا - إلى حاسوبك باستخدام USB - -لاستيراد الملف إلى حاسوبك: - - . احفظ ملف "collection.apkg" إلى سطح المكتب - . انقر نقرًا مزدوجًا على الملف لفتحه في أنكي - . أكّد أنك تريد استبدال المجموعة الحالية بالملف المصدر من هاتفك - . بعد الاستيراد، تستطيع حذف ملف apkg إذا أردت - -=== تصدير حزمة رزمة -إذا أردت مشاركة رزمة في أنكيدرويد مع مستخدم آخر، تستطيع تصدير حزمة رزمة. - -من القائمة الرئيسية في شاشة الرزم: - - . انقر نقرًا مطولًا على الرزمة التي تريد تصديرها - . انقر *تصدير* - . انقر *موافق* لاستخدام الخيارات الافتراضية - . انقر *موافق* مجددًا لإرسال ملف apkg المصدر عبر البريد الإلكتروني إلى مستخدم آخر - - -[[backups]] -== نسخ احتياطية تلقائية - -ينشئ أنكيدرويد نسخًا احتياطية لمجموعتك تلقائيًا. تتضمن هذه النسخ كل البطاقات والإحصائيات، ما عدا الوسائط من صور وملفات صوتية. - -يجري النسخ الاحتياطي في الخلفية عندما تبدأ التطبيق. تُؤخذ نسخة احتياطية فقط إذا مرت أكثر من 5 ساعات -منذ آخر نسخة. يخزن أنكيدرويد 8 نسخ احتياطية بشكل افتراضي، لكن يمكن تغيير هذا العدد من الإعدادات الرئيسية. - -تستطيع استرجاع نسخة احتياطية بالضغط على خيار *استعادة من نسخة احتياطية* من القائمة الرئيسية -في <>. - -[[settings]] -== التفضيلات - -يمكن فتح شاشة التفضيلات بفتح قائمة التنقل واختيار «إعدادات». يسمح لك هذا بتخصيص عدة إعدادات ومظهر أنكيدرويد. - -تقسم شاشة التفضيلات إلى أقسام مختلفة، وهي مشروحة في الأسفل. - -=== أنكيدرويد -هذه إعدادات عامة تؤثر بكل التطبيق: - -حساب أنكي ويب:: يغير الحساب المستخدم للمزامنة مع السحابة. لمزيد من المعلومات حول المزامنة، -انظر <>. - -جلب الوسائط أثناء المزامنة:: يزامن أنكيدرويد الأصوات والصور بالإضافة إلى البطاقات وسجل المراجعات بشكل افتراضي. -إذا ألغيت تفعيل هذا الخيار، فلن يتم تنزيل الوسائط أو رفعها إلى خادم المزامنة من قبل أنكيدرويد. - -مزامنة تلقائية:: فعل هذا الخيار إذا كنت تريد أن يزامن أنكيدرويد عند فتح التطبيق وإغلاقه. -هناك حد عشر دقائق لهذا السلوك. تستطيع إيقاف المزامنة بعد بدئها بالضغط على زر الرجوع الخاص بهاتفك، -لكن قد يأخذ إلغاء المزامنة بعض الوقت. - -+ -قد يرغب المستخدمون الذي يريدون تحكمًا كاملًا بوقت المزامنة في استخدام تطبيق طرف ثالث لأتمتة المزامنة. -انظر https://github.com/ankidroid/Anki-Android/wiki/AnkiDroid-API#sync-intent[وثائق الواجهة البرمجية] لمزيد من المعلومات حول هذا. - -رزمة البطاقات الجديدة:: يعني الخيار الافتراضي «استخدام الرزمة الحالية» أن أنكي يحفظ نوع الملحوظة المستخدم مؤخرًا -لكل رزمة ويحدده مجددًا عند اختيارك القادم للرزمة (كما سيبدأ مع تحديد الرزمة الحالية عند اختيار إضافة من أي مكان). -الخيار الآخر، «تقرير حسب نوع الملحوظة»، يحفظ الرزمة المستخدمة مؤخرًا لكل نوع ملحوظة -(ويفتح شاشة الإضافة مع تحديد نوع الملحوظة الأخير عند اختيار إضافة). قد يكون هذا أكثر ملائمة إذا كنت -تستخدم نوع ملحوظة واحدًا لكل رزمة. - -اللغة:: تغيير اللغة. ملاحظة: ترجمات أنكيدرويد مساهمة من قبل متطوعين. إذا وجدت ترجمات ناقصة أو خاطئة، -فلا تتردد بالمساهمة في ترجمة المشروع. -انظر https://github.com/ankidroid/Anki-Android/wiki/Contributing#translate-ankidroid[ويكي أنكيدرويد] لمزيد من التفاصيل. - -نمط الإبلاغ عن الأخطاء:: يتحكم فيما إذا كان أنكيدرويد يطلب إذنك قبل إرسال تقارير الأخطاء -إلى نظام تقارير الأخطاء الخاص بنا عندما يحدث خطأ في أنكيدرويد. -تستطيع إيقاف ميزة إرسال التقارير كليًا إذا أردت. - -==== التنبيهات -يسمح لك هذا القسم بضبط كيفية ووقت إظهار أنكيدرويد للتنبيهات في شريط تنبيهات أنكيدرويد. - -نبّهني عند :: *لا تنبه مطلقاً* يوقف كل التنبيهات. *توفُّر الرسائل المعلقة* يظهر فقط تحديثات الحالة المهمة -مثل اكتمال المزامنة. *أكثر من س بطاقة مستحقة* يظهر تنبيهًا عندما يكون لديك أكثر من س بطاقة مستحقة -(يتطلب تفعيل عنصر الواجهة، الـ"widget"). - -اهتزاز:: يجعل هاتفك يهتز عند إظهار تنبيه. - -وميض الضوء:: يجعل ضوء هاتفك يومض عندما يكون هناك تنبيه غير مقروء (إذا كان لهاتفك ضوء تنبيهات) - - -=== المراجعة - -تسمح لك شاشة المراجعة بتخصيص كيفية عمل أنكيدرويد عند مراجعة البطاقات. لاحظ أن هذه الشاشة -تظهر إعدادات المراجعة التي تنطبق على *كل الرزم* فقط. هناك مزيد من الإعدادات *الخاصة بكل رزمة*. -يمكن إيجاد الإعدادات الخاصة في *خيارات الرزمة*. - -موضع البطاقات الجديدة :: يتحكم بوقت إظهار البطاقات الجديدة: إما مختلطة مع المراجعات، -أو بعدها، أو قبلها. - -بداية اليوم التالي :: يتحكم بوقت بدء إظهار بطاقات اليوم التالي. -يضمن الإعداد الافتراضي (4 صباحًا) أنه إذا كنت تدرس في منتصف الليل، فلن تُعرض لك بطاقات يومين اثنين في جلسة واحدة. إذا كنت تسهر حتى وقت متأخر جدًا أو تستيقظ مبكرًا، فقد ترغب في ضبط هذا الخيار إلى الوقت الذي تنام فيه. - -حد التعلم المبكر :: يتحكم بسلوك أنكيدرويد عندما لا يتبقى شيء لتدرسه في الرزمة الحالية إلا بطاقات التعلم. -الإعداد الافتراضي (20 دقيقة) يجعل أنكيدرويد يظهر البطاقات مبكرًا إذا كان موعد استحقاقها بعد أقل من 20 دقيقة -وليس هناك شيء آخر لتدرسه. إذا ضبطت هذا الخيار إلى 0، فسينتظر أنكيدرويد المدة كاملة دائمًا، -ويظهر شاشة التهنئة حتى تصبح البطاقات المتبقية جاهزة للمراجعة. - -مهلة مربع الوقت: تقنية تقسيم المهام (Timeboxing) هي تقنية تساعدك على التركيز بتقسيم نشاط طويل -(مثل جلسة دراسة مدتها 30 دقيقة) إلى جلسات أصغر. إذا ضبطت هذا الخيار إلى عدد من الدقائق غير الصفر، -فسيظهر أنكيدرويد عدد البطاقات التي درستها خلال المدة المحددة بشكل دوري. - -==== العرض -يتعلق هذا القسم بطريقة عرض البطاقات عند المراجعة. - -إبقاء الشاشة مضيئة :: يتجاهل إعداد مهلة إطفاء الشاشة التلقائي لأندرويد ويبقى الشاشة مضيئة دومًا. - -وضع ملء الشاشة :: يحولك إلى وضع ملء الشاشة لكي تستطيع الاستفادة من مساحة أكبر من الشاشة. -تستطيع تفعيل خيار «إخفاء أشرطة النظام»، والذي يخفي شريط حالة النظام، وشريط التطبيق، وأزرار التنقل السفلى. -كبديل، تستطيع تفعيل خيار «إخفاء أشرطة النظام وأزرار الإجابة»، والذي يخفي كل شيء ما عدا محتوى البطاقة. -تستطيع الخروج مؤقتًا من وضع ملء الشاشة بالسحب للأعلى أو الأسفل من أشرطة النظام. - -+ -لاحظ أن وضع ملء الشاشة مدعوم في أندرويد 4.4 وما فوق فقط. - -محاذاة للوسط :: يحاول أنكيدرويد إظهار البطاقات كما تظهر في الحاسوب بشكل افتراضي. -لكن إذا كنت تفضل محاذاة بطاقاتك إلى الوسط عموديًا في أنكيدرويد، فبإمكانك تفعيل هذا الخيار. - -إظهار وقت الأزرار :: تُظِهر أزرار الإجابة الوقت القادم لإظهار البطاقة بشكل افتراضي. -إذا ألغيت تفعيل هذا الخيار، فلن تظهر الأوقات، وستظهر فقط عبارات «مجددًا»، و«صعب» و«جيد»، و«سهل». - -تكبير البطاقة :: يتحكم بمستوى تكبير محتوى البطاقة (باستثناء الصور). -تستطيع استخدام هذا الخيار إذا كنت تريد تغيير حجم الخط لكل البطاقات. - -تكبير الصور :: يتحكم بمستوى تكبير الصور المضمنة في البطاقات. - -حجم زر الإجابة :: إذا كنت تجد صعوبة في ضغط زر الإجابة، فبإمكانك استخدام هذا الخيار -لجعله أكبر. - -إظهار المتبقي :: أوقف هذا الخيار لإخفاء عدد البطاقات في أعلى يسار الشاشة. - -==== السبورة -يتعلق هذا القسم بضبط السبورة في شاشة المراجعة. -ملاحظة: يجب تفعيل السبورة لكل رزمة بشكل منفصل من القائمة في شاشة الدراسة. - -عرض الخط :: يضبط حجم خط السبورة. قد يسمح لك تصغير حجم الخط بالرسم بتفصيل أكثر. - -خط أسود :: يستخدم خطًا أسودًا، ما قد يقلل من استخدام الذاكرة. ملاحظة: لا ينطبق هذا الخيار -عند تفعيل الوضع الليلي. - -==== إظهار الجواب تلقائيًا -تسمح لك هذه الميزة بإظهار الجواب تلقائيًا بعد مدة محددة. تستطيع أيضًا إظهار السؤال -التالي تلقائيًا؛ يُفترض أنك فشلت في تذكر البطاقة في هذه الحالة (يتم تحديد زر «مجددًا» تلقائيًا). - -مهلة إظهار الجواب :: المدة المنتظرة قبل إظهار الجواب تلقائيًا. - -مهلة إظهار السؤال التالي :: المدة المنتظرة قبل إظهار السؤال التالي. - -=== خطوط -تستطيع تغيير الخط المستخدم في أنكيدرويد في هذه الشاشة، بالإضافة إلى بعض خيارات التكبير المتعلقة بالخطوط. -انظر قسم <> لمزيد من المعلومات حول استخدام خطوط مخصصة. - -الخط الافتراضي :: يضبط الخط الافتراضي المستخدم عند المراجعة. تستطيع إضافة خطوط -إلى هذه القائمة عن طريق نسخها إلى مجلد "fonts". - -قابلية تطبيق الخط الافتراضي :: السلوك الافتراضي هو استخدام الخط الافتراضي فقط عندما -لا يكون هناك خط محدد في تنسيق البطاقة باستخدام أنكي الحاسوب. لكن بإمكانك فرض الخط الافتراضي -مع تجاهل أي خط في تنسيق البطاقة. - -خط المتصفح والمحرر :: الخط المستخدم في المتصفح والمحرر. - -نسبة تضخيم حجم خط متصفح البطاقات :: يضبط الخط المستحدم في متصفح البطاقات. - -[[gestures]] -=== الإيماءات -يسمح لك أنكيدرويد بتخصيص الواجهة بحيث تستطيع تنفيذ الإجراءات المستخدمة بشكل متكرر -بسرعة باستخدام إيماءات النقر والسحب. - -==== الإجراءات -يمكن استخدام الإيماءات التالية: - - * السحب للأعلى - * السحب للأسفل - * السحب لليسار - * السحب لليمين - * اللمس المزدوج - * اللمس في الأعلى - * اللمس في الأسفل - * اللمس في اليسار - * اللمس في اليمين - -تتوفر الإجراءات التالية لكل إيماء: - -لا إجراء :: لا يفعل شيئًا. مفيد إذا كنت تريد إيقاف بعض أنواع السحبات، أو مناطق النقر وما إلى ذلك. - -زر الإجابة 1 :: عند إظهار شاشة الجواب، اختر الزر الأحمر والتي تدل على أنك تريد -مراجعة البطاقة مجددًا قريبًا. هذا مفيد عند نسيان بطاقة أو عندما ترغب في مراجعتها بشكل متكرر أكثر. -عند إظهار السؤال، هذا الإجراء (وكل إجراءات الإجابة في الأسفل) ستظهر الجواب ببساطة. - -زر الإجابة 2 :: عند إظهار شاشة الجواب، اختر الزر الثاني من اليسار والذي يدل على أنك -وجدت البطاقة صعبة التذكر. - -زر الإجابة 3 :: عند إظهار شاشة الجواب، اختر الزر الثالث من اليسار. - -زر الإجابة 4 :: عند إظهار شاشة الجواب، اختر الزر الرابع من اليسار (عندما يكون ظاهرًا). - -الإجابة الموصى بها (أخضر) :: عند إظهار شاشة الجواب، اختر الزر الأخضر. -هذا الزر هو ما يجب أن تستخدمه في أغلب الأوقات. - -الإجابة بأفضل مما أوصي به :: عند إظهار شاشة الجواب، اختر الزر على اليمين، -ما يدل على أنك وجدت البطاقة سهلة التذكر جدًا وتريد فاصلًا زمنيًا أطول. - -تراجع :: تراجع عن الإجراء الأخير. - -تحرير البطاقة :: تحرير البطاقة الحالية. - -تعليم :: يضيف وسم "Marked" (مُعَلَّم) للملحوظة الحالية لتسهيل إيجادها. - -بحث عن التعبير :: عند تفعيل خاصية البحث (من الإعدادات المتقدمة)، يبحث عن تعبير في القاموس المحدد. -ملاحظة: يجب نسخ التعبير إلى الحافظة قبل أن يعمل هذا الإجراء. - -دفن البطاقة :: يخفي البطاقة الحالية من المراجعات. - -تعليق البطاقة :: يمنع البطاقة الحالية من الظهور أثناء المراجعات حتى تلغي تعليقها من خلال متصفح البطاقات. - -حذف الملحوظة :: يحذف الملحوظة المعروضة حاليًا وكل بطاقاتها. - -تشغيل الوسائط :: يعيد تشغيل أي تسجيل صوتي في البطاقة. - -توقف عن التعلم :: يوقف المراجعة ويأخذك إلى شاشة موجز الرزمة. - -دفن الملحوظة :: يدفن الملحوظة الحالية (يخفيها حتى اليوم التالي). - -تعليق الملحوظة :: يعلق الملحوظة الحالية (يخفيها حتى تلغي تعليقها). - -تفعيل المؤشر الأحمر :: يفعّل المؤشر الأحمر، إلا إذا كان المؤشر أحمر بالفعل، في هذه الحالة يُزال المؤشر. - -تفعيل المؤشر البرتقالي :: يفعّل المؤشر البرتقالي، إلا إذا كان المؤشر برتقاليًا بالفعل، في هذه الحالة يُزال المؤشر. - -تفعيل المؤشر الأخضر :: يفعّل المؤشر الأخضر، إلا إذا كان المؤشر أخضر بالفعل، في هذه الحالة يُزال المؤشر. - -تفعيل المؤشر الأزرق :: يفعّل المؤشر الأزرق، إلا إذا كان المؤشر أزرق بالفعل، في هذه الحالة يُزال المؤشر. - -إزالة المؤشر :: يزيل المؤشر من البطاقة. - -=== خيارات متقدمة -ميزات أقل شيوعًا للمستخدمين المتقدمين. - -مسار المجموعة :: تغير موقع تخزين بيانات أنكيدرويد (لا ينصح به). - -فرض مزامنة كاملة :: -انقر هذا الخيار لفرض رفع أو تنزيل كامل عند المزامنة التالية (على سبيل المثال، لأنك حذفت رزمة بدون قصد في جانب -وتريد استرجاعها بدلًا من مزامنة حذفها). - -إحصائيات متقدمة :: -يأخذ بعين الاعتبار تأثير المراجعات المستقبلية في المخطط البياني «توقعات». -انظر <<الإحصائيات المتقدمة,here>> لمزيد من المعلومات. - -==== حلول -إدخال الجواب في البطاقة :: -إذا ضبطت بطاقاتك ليتم سؤالك عن الجواب (كما هو مشروح في https://docs.ankiweb.net/#/templates/intro?id=card-templates[هذا القسم من دليل الحاسوب])، -يظهر أنكيدرويد لوحة مفاتيح في هذه البطاقات ويسمح لك بإدخال الجواب. - -+ --- -من أجل توفير تجربة مستخدم أفضل عند استخدام السبورة والإيماءات، نستخدم مربع إدخال منفصلًا -عن البطاقة. هذا غير متوافق مع طريقة عمل هذه الميزة في أنكي الحاسوب. - -للتوافق الكامل مع أنكي الحاسوب، تستطيع تفعيل هذا الخيار والذي يسمح لك بتوفير مساحة في الشاشة، -واختيار خط ملائم (ياباني مقابل صيني مثلًا) لمربع الإدخال. --- -حل للإدخال :: -بعض الأجهزة القديمة لا يمكنها نقل التركيز إلى مربع الإدخال، لذلك أضيف هذا الخيار (مخفي لنسخ واجهة البرمجة أعلى من 14). - -حل للنقر المطول :: -بعض الأجهزة القديمة لا تستطيع الكشف عن النقر المطول لبدء نسخ النص ولصقه، لذلك أضيف هذا الخيار -(مخفي لنسخ واجهة البرمجة أعلى من 10). - -إصلاح للحروف العبرية الصوتية :: -بعض الأجهزة القديمة لا يمكنها عرض النصوص العبرية، لذلك أضيفت هذه الميزة والتي تسمح للمستخدم -بتنزيل خط عبري يعمل وتنصيبه (مخفي لنسخ واجهة البرمجة أعلى من 15). - -تحويل النص إلى كلام :: -فعّل هذا الخيار لجعل أنكيدرويد يقرأ كل النصوص في بطاقاتك باستخدام المحرك الافتراضي لتحويل النص -إلى كلام. محرك غوغل الافتراضي يجب أن يعمل، محركات الطرف الثالث قد تعمل أو لا. -يطلب منك أنكيدرويد تحديد لغة مقدمة بطاقاتك وخلفها لكل رزمة في أول مرة تراجع فيها بطاقة في تلك الرزمة. -لتغيير اللغة أو إيقاف هذه الميزة لرزمة معينة بعد تحديد خيار في أول مرة، تحتاج إلى استخدام -خيار «إعادة تعيين اللغات» الموصوف في الأسفل وضبط كل رزمة على حدا. - -+ --- -كبديل، إذا كنت تريد قراءة أقسام من البطاقة فقط، أو إذا كنت ضبط لغة عدة رزم في دفعة واحدة، -تستطيع إدخال وسوم `` في <>. -على سبيل المثال، في القالب الخلفي التالي لبطاقة: - -[subs=+quotes] -.... -{{FrontSide}} - -
- -**{{ترجمة_إنجليزية}}**** -

-{{مثال}} -.... - -يتم قراءة حقل `ترجمة_إنجليزية` فقط بصوت إنجليزي بريطاني. لن يُقرأ حقل `مثال` الموجود -خارج وسم ``. يجب أن يكون لكل وسم `` الخاصيات التالية: - - * `service`: يجب ضبطه إلى `"android"`، وإلا لن يُقرأ محتوى وسم ``. - * `voice`: يُستخدم لتحديد لغة الصوت؛ يجب أن يكون https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes[رمز لغة مكونًا من حرفين أو ثلاث]، يمكن إتباعه بشرطة تحتية (_) و -https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2[رمز دولة أو منطقة مكون من حرفين]. -يمكن إيجاد قائمة محدثة دوريًا للغات المدعومة من قبل محرك غوغل في https://en.wikipedia.org/wiki/Google_Text-to-Speech[صفحته على ويكيبيديا]. - -لجعل كل من أنكيدرويد وإضافة https://ankiatts.appspot.com/[AwesomeTTS] على الحاسوب -يستخدمان محرك تحويل النص إلى كلام لقراءة أقسام من البطاقة، ضع وسم `` -داخل وسم `` المعرف من قبل AwesomeTTS، أو بالعكس. مثال: - -.... - - - {{ترجمة_إنجليزية}} - - -.... - -يتجاهل أنكيدرويد وسوم `` التي تصف خدمة تحويل نص إلى كلام غير معروفة. بينما قد يظهر AwesomeTTS -رسالة تنبيهية عند مصادفة وسم ``؛ لإسكات هذا التنبيه، أوقف خياري -_إظهار الأخطاء_ في تبويبة _التشغيل_ في شاشة _AwesomeTTS: تخصيص_ في نسخة الحاسوب. - -_قد تُحذف هذه الميزة في المستقبل لصالح إضافة منفصلة يمكن تنزيلها_ --- - -قاموس البحث :: -القاموس المستخدم للبحث عن البطاقات المنسوخة إلى الحافظة عند المراجعة. بعد ضبط قاموس، -افعل التالي لإجراء بحث: - -+ --- - * انقر نقرًا مطولًا على النص الذي تريد نسخه في شاشة المراجعة. - * بعد تحديد الكلمة التي تريد نسخها، اضغط أيقونة «نسخ» في شريط التطبيق في أعلى الشاشة. - * انقر نقرة في أي مكان. - * يجب أن تظهر أيقونة عدسة مكبرة، والتي تجري البحث عند ضغطها. - -كبديل، يمكن تنفيذ إجراء البحث باستخدام الإيماءات. - -_ستُحذف هذه الميزة في المستقبل لصالح إضافة على الأغلب._ --- - -إعادة تعيين اللغات :: -مفيد لإعادة ضبط لغة تحويل النص إلى كلام - -القارئ الإلكتروني (أزرار أعلى/أسفل) :: -دعم أزرار عتاد القارئ الإلكتروني (انظر https://github.com/ankidroid/Anki-Android/issues/1625[الموضوع رقم 1625]). - -_ستُحذف هذه الميزة في المستقبل لصالح إضافة على الأغلب._ - -مضاعفة فجوة التمرير :: -يضاعف مسافة التمرير عند استخدام أزرار عتاد القارئ الإلكتروني. - -== ميزات متقدمة -[[mathjax]] -=== دعم MathJax -MathJax هو نظام صف حروف حديث للرياضيات والكيمياء. يدعم أنكيدرويد بطاقات MathJax بدون إعداد. -Mathjax مضبوط لتوقع صيغ TeX، مع `\(` و `\)` لإحاطة للمعادلات السطرية، و `\[` و `\]` لمعادلات العرض. - -لتجربة هذه الميزة، أدخل التالي في حقل: - -... -\(\sqrt{x}\) -... - -وعاين البطاقة. - -لمزيد من التفاصيل، انظر https://docs.ankiweb.net/#/math?id=mathjax[دعم Mathjax] -في دليل أنكي الحاسوب. - -لم تعد https://www.reddit.com/r/Anki/comments/ar7lxd/how_to_load_mathjax_color_extension_on_anki/egm6u5j/[الحلول السابقة] -ضرورية ابتداءً من نسخة 2.9. - -[[reverseCards]] -=== البطاقات المعكوسة -لأنكي https://docs.ankiweb.net/#/getting-started?id=note-types[أنواع ملحوظات جاهزة تسمح لك بمراجعة البطاقات باتجاهين]. -عند <> في أنكيدرويد، عليك استخدام نوع من هذه الأنواع، -مثل «أساسي (وبطاقة معكوسة)»، والذي سينشئ بطاقة معكوسة تلقائيًا. - -++++++++++ - -++++++++++ - -إذا استخدمت نوع ملحوظة خاطئ عند إضافة مواد، تستطيع تغييرها من خلال <>، أو تغيير نوع ملحوظة عدة بطاقات في دفعة واحدة باستخدام المتصفح في نسخة الحاسوب. -لفعل هذا، اتبع التعليمات في قسم <>، -ثم افتح المتصفح في أنكي الحاسوب، واختر البطاقات التي تريد تغييرها، ثم اختر *تغيير نوع الملحوظة* من القائمة. - -كبديل، إذا كنت تستخدم مخطط بطاقة مخصصًا لا يتضمن بطاقة معكوسة، تستطيع تعديل نوع الملحوظة -لإضافة بطاقة معكوسة باتباع التعليمات في قسم https://docs.ankiweb.net/#/templates/generation?id=reverse-cards[البطاقات المعكوسة] في دليل أنكي الحاسوب. -رغم أنه أصعب مما هو في أنكي الحاسوب، يمكن تعديل نوع الملحوظة من أنكيدرويد مباشرة؛ -انظر قسم <> لمزيد من المعلومات. - -[[customFonts]] -=== خطوط مخصصة - -يسمح لك أنكيدرويد باستخدام خطوط غير الخاصة بالنظام في بطاقاتك. لضبطها بشكل صحيح، -ينصح بشدة باستخدام الطريقة الرسمية المستخدمة في أنكي الحاسوب. انظر https://docs.ankiweb.net/#/templates/styling?id=installing-fonts[القسم المتعلق بهذا في دليل الحاسوب] -لمزيد من المعلومات. - -كبديل، تستطيع إنشاء مجلد فرعي باسم "fonts" في مجلد أنكيدرويد الرئيسي -(المجلد الذي يحتوي على مجلد "backups"(نسخ احتياطية)، والمعروض في إعدادات > إعدادات متقدمة > مجلد أنكيدرويد)، ونسخ ملف خط متوافق (.ttf) إلى هناك، -وضبطه كالخط الافتراضي من خلال إعدادات > خطوط > الخط الافتراضي. -ملاحظة: تغير هذه الطريقة الخط الافتراضي *لكل* بطاقاتك، بينما يمكن للطريقة الرسمية أن تكون أكثر تحديدًا. -بالإضافة إلى ذلك، إذا زامنت مع أنكي ويب، فاستخدام هذه الطريقة يؤدي إلى أن تُعرض البطاقات بشكل مختلف على أجهزة مختلفة. - -تدعم الخطوط بصيغة ttf رسميًا فقط في أنكي/أنكيدرويد. -ينصح بخط https://www.google.com/get/noto/#/[Google Noto] لكل اللغات، كما يمكن إيجاد -بعض الخطوط المجانية https://github.com/ankidroid/Anki-Android/wiki/Freely-distributable-fonts[هنا]. - -ترجى ملاحظة أن على أنكيدرويد تحميل كامل الخط إلى الذاكرة لاستخدامه، ويمكن أن تكون خطوط -اللغات الآسيوية كبيرة. إذا كان لديك جهاز قديم ولاحظت أن أنكيدرويد يتوقف عن العمل بشكل متكرر -بعد تنصيب خط، فقد تكون قد تخطيت حد ذاكرة جهازك. في حالة خط Google Noto، لا ينصح -باستخدام خط اللغات الآسيوية المشترك، بل ينصح بالحصول على الخطوط الخاصة بكل لغة -https://github.com/googlei18n/noto-cjk[من هنا]. - -*ملاحظة 1*: إذا كان خيار «جلب الوسائط أثناء المزامنة» موقفًا، فقد تحتاج إلى نسخ ملف الخط يدويًا -من أنكي الحاسوب إلى مجلد AnkiDroid/collection.media. - -*ملاحظة 2*: إذا لم يعمل الخط بعد اتباع الخطوات هنا وفي دليل أنكي الحاسوب، انظر -https://github.com/ankidroid/Anki-Android/wiki/FAQ#i-followed-the-instructions-in-the-manual-but-i-still-cant-get-my-custom-font-to-work[«خطوات مفصلة حول كيفية حل مشاكل الخطوط»]. - - -[[customizingCardLayout]] -=== مخطط بطاقات مخصص -يمكن تخصيص مخطط بطاقاتك بالكامل، إلا أن هذا موضوع متقدم مع منحنى تعلم حاد بعض الشيء، -وقد تجد من الأسهل إجراء التخصيص في <>. - -هناك تعليمات مفصلة حول تحرير أنواع الملحوظات في قسم https://docs.ankiweb.net/#/templates/intro?id=card-templates[قوالب البطاقات] في دليل الحاسوب، -كما تتوفر معظم الإجراءات المناقشة هناك في أنكيدرويد بالنقر على «بطاقات» في أسفل محرر الملحوظات، -أو اختيار خيار «إدارة أنواع الملحوظات» في محدد الرزم. لن تُكرر التفاصيل هنا حيث إنه تتوفر معلومات مفصلة حول تخصيص -مخططات البطاقات في دليل الحاسوب. - -هناك أيضًا https://github.com/ankidroid/Anki-Android/wiki/Advanced-formatting[صفحة تنسيقات متقدمة] -في ويكي أنكيدرويد مع إرشادات عديدة حول الاستفادة القصوى من تنسيق البطاقات. ننصحك بقرائتها وتعديلها بحرية -إذا كان لديك أي إرشادات تريد مشاركتها مع المجتمع. - -[[typeInAnswer]] -=== ميزة إدخال الجواب - -يسمح لك أنكيدرويد بإدخال جواب ومقارنته بالجواب الصحيح. عليك إعداد هذا من خلال أنكي الحاسوب، -كما هو مشروح في https://docs.ankiweb.net/#/templates/fields?id=checking-your-answer[دليل الحاسوب]. - -يستبدل أنكي الحاسوب حقل `{{type:NN}}` في مقدمة البطاقة بصندوق إدخال. -في أنكيدرويد، يُستبدل “......”، ويظهر صندوق إدخال في الأسفل. تظهر المقارنة بين النص المدخل والنص الصحيح -في جانب السؤال في مكان حقل `{{type:NN}}` هناك، كما في نسخة الحاسوب. - -يمكن إخفاء صندوق الإدخال ولوحة المفاتيح بتفعيل «تعطيل إدخال الجواب» في التفضيلات. - -حتى عندما تعطيل إدخال الجواب، يظهر الجواب الصحيح في جانب الجواب. هذا مقصود؛ وإلا قد -لا يظهر الجواب الصحيح أبدًا. - -لإخفاء المقارنة (لأن الجواب الصحيح ظاهر على أي حال مثلًا)، يمكن استخدام معرف HTML `typeans`. -أضف `.mobile #typeans {display: none;}` إلى https://docs.ankiweb.net/#/templates/styling?id=card-styling[تنسيق البطاقة] باستخدام نسخة الحاسوب. - -لمؤشر إدخال الجواب والمقارنة أصناف HTML أكثر يمكن استخدامها لتغيير طريقة عرضها. -بعضها مثل الموجود في الحاسوب، بينما البعض الآخر خاص بأنكيدرويد. - -تستخدم المقارنة ثلاث أصناف: typeGood, typeBad and typeMissing لإضافة خلفية خضراء، -وحمراء، ورمادية إلى حقل المقارنة. تُستخدم هذه الأصناف في نسخة الحاسوب أيضًا. - -لمؤشر `......` صنف `typePrompt` أيضًا. - -عندما يكون إدخال الجواب معطلًا من خلال التفضيلات، يضاف صنف `typeOff` إلى المؤشر -في جانب السؤال، وإلى عنصر div الذي يحتوي حقل المقارنة في جانب الجواب. يمكن استخدام هذا الصنف -لإظهار مؤشر الإدخال أو إخفاء المقارنة في هذه الحالة. - -[[advancedStatistics]] -=== الإحصائيات المتقدمة - -إذا كانت الإحصائيات المتقدمة مفعلة، يتغير مخطط «توقعات» ليظهر العدد المقدر للمراجعات -التي ستصبح مستحقة في يوم محدد في المستقبل مع الأخذ بعين الاعتبار المراجعات المستقبلية، -وتعلم البطاقات الجديدة، والفشل في تعلم بطاقات. تظهر الأشرطة والمحور الأيسر عدد البطاقات -المستحقة في كل يوم إذا درست كل البطاقات في كل يوم، بينما يظهر الخط والمحور الأيمن -عدد البطاقات التي لم ترها بعد (معروضة كـ «تعلُّم»)، والبطاقات اليافعة، والناضجة -والتي ستتكون منها رزمتك أو مجموعتك إذا درست كل البطاقات كل يوم. -لا يحصي مخطط التوقعات المراجعات التي مضى تاريخ استحقاقها. إنه يفترض أن هذه البطاقات سُتراجع -حسب خيار الرزمة «عدد المراجعات الأقصى في اليوم». - -يمكن تفعيل الإحصائيات المتقدمة من خلال إعدادات > إعدادات متقدمة > إحصائيات متقدمة (في قسم الإضافات). - -نتائج المراجعات المستقبلية وتعلم البطاقات والفشل في ذلك يؤثر بالمراجعات بعد تلك المراجعات المستقبلية. -لأخذ هذا بعين الاعتبار، تُحسب احتمالية كل نتيجة استنادًا إلى سجل المراجعات. ثم يُختار الناتج بشكل عشوائي، -بحيث أن الناتج الأكثر احتمالًا حسب سجل المراجعات يُحتمل اختياره أكثر من ناتج أقل احتمالًا حسب سجل المراجعة. -تؤثر كل الإعدادات بكيفية اعتبار تأثير المراجعات المستقبلية على المراجعات القادمة. - -حساب أول س يوم، ومحاكاة الباقي :: -إذا ضُبط هذا الإعداد إلى رقم أكبر من صفر، فبدلًا من اختيار ناتج عشوائيًا، يؤخذ كل ناتج محتمل -بعين الاعتبار في المحاكاة، مع احتماليته. تُعتبر الاحتمالية للمخطط البياني والمراجعات المستقبلية -التي تنتج عنها، ما يؤثر بالمخطط أيضًا. لمراجعة عدة نواتج محتملة (لنقل 4)، وكلها تنتج مراجعة. -لتلك المراجعة نواتج محتملة أيضًا، وهكذا دواليك. -إذا تمت محاكاة عدة مراجعات بهذه الطريقة، يجب أخذ عدة مراجعات (4 x 4 x 4 x ... ) -بعين الاعتبار ما يؤدي إلى زيادة الوقت اللازم لإنشاء المخطط البياني. -لذلك، فالمراجعات بعد س يوم من الآن تحاكى باختيار ناتج عشوائي. - -+ -باختصار، قيمة س أكبر تعطي مخططًا أدق، لكن هذا يأخذ وقتًا أكبر لإنشاء المخطط. - -دقة الحساب :: - -المراجعات التي تحدث باحتمالية أصغر من %100 ناقص دقة الحساب المضبوطة تحاكى باختيار ناتج عشوائي -بدلًا من اعتبار كل ناتج متحمل. يمكن تطبيق هذا الإعداد فقط إذا تم حساب أول س يوم. -إذا لم تكن الإحصائيات المتقدمة مفعلة، يظهر مخطط «توقعات» العدد المقدر للمراجعات التي -ستصبح مستحقة في يوم محدد في المستقبل إذا لم تراجع بطاقات، ولم تتعلم بطاقات جديدة ولم تفشل في تذكر أي بطاقة. - -+ -باختصار، دقة أعلى تعطي مخططًا أكثر دقة، لكن هذا يأخذ وقتًا أكبر لإنشاء المخطط. - -عدد مرات تكرار المحاكاة :: -ينشئ المخطط عدة مرات ثم يعرض معدل هذه المخططات. -في كل مرة ينشئ فيها المخطط، قد يتم اختيار ناتج آخر عشوائيًا. إذا أخذنا معدل عدة نتائج مختارة عشوائيًا -مع اعتبار الاحتماليات من سجل المراجعات، فسيكون الناتج المتوسط قريبًا إلى معدل احتماليات سجل المراجعة على الأغلب. -إذا أخذنا معدل عدة مخططات، فسيكون المخطط المتوسط -على الأغلب- قريبًا إلى المخطط المولَّد -باعتبار كل النتائج المحتملة. إذا لم يكن عدد المخططات المأخوذ معدلها كبيرًا جدًا، -فسيكون هذا أسرع من اعتبار كل النتائج المحتملة. - -+ -باختصار، عدد أكبر من مرات التكرار يعطي مخططًا أدق، لكن هذا يأخذ وقتًا أكبر لإنشاء المخطط. - -[[reminders]] -=== التذكيرات -يمكن لأنكيدرويد أن يذكرك بتخصيص بعض الوقت لمراجعة البطاقات كل يوم في وقت محدد باستخدام -نظام تنبيهات أندرويد. تستطيع ضبط التذكيرات لكل مجموعة خيارات بشكل منفصل. -لضبط تذكير، اذهب إلى خيارات الرزمة > تذكيرات، وفعّل الخانة وحدد وقت التذكير. -للتوقف عن تلقي التنبيهات، اذهب إلى خيارات الرزمة > تذكيرات وألغي تعليم الخانة. - -تعمل التنبيهات للرزم العليا فقط. يرجى إخبارنا إذا كنت تريد إضافة تنبيهات للرزم الفرعية أيضًا. - -[[setlanguagehint]] -=== التحديد التلقائي للغة -في أنكيدرويد ميزة تحديد تلقائي للغة في محرر الملحوظات بدءًا بالإصدار 2.13. -تسمح لك هذه الميزة بتعريف لغة افتراضية للوحة المفاتيح في حقل لنوع ملحوظة. - -إذا كان لديك مثلًا حقول ملحوظة روسية وإنجليزية وتدعم لوحة مفاتيحك -واجهة setImeHintLocales البرمجية في أندرويد، فسيتغير مخطط لوحة المفاتيح -إلى الروسية في الحقل الأول ثم إلى الإنجليزية في الحقل الثاني تلقائيًا عندما يتم -تركيز الحقول. https://youtu.be/JrxDjTrRhBE[شاهد هذا الفيديو لترى كيف هذا] - -[[keyboardShortcuts]] -== اختصارات لوحة المفاتيح - -=== الشاشة الرئيسية - -|=== -|اختصار | وظيفة - -|kbd:[A] -|إضافة ملحوظة - -|kbd:[B] -|متصفح البطاقات - -|kbd:[Y] -|مزامنة -|=== - -=== المراجعة - -|=== -|اختصار | وظيفة - -|kbd:[1],kbd:[2],kbd:[3],kbd:[4] -|ضغط زر الإجابة رقم س - -|Gamepad Y -|قلب البطاقة/ضغط زر الإجابة الأول - -|Gamepad X -|قلب البطاقة/ضغط زر الإجابة الثاني - -|Gamepad B -|قلب البطاقة/ضغط زر الإجابة الثالث - -|Gamepad A -|قلب البطاقة/ضغط زر الإجابة الرابع - -|kbd:[Space],kbd:[Enter] -|قلب البطاقة/الإجابة بـ«جيد» - -|kbd:[e] -|تحرير الملحوظة - -|kbd:[*] -|تعليم الملحوظة - -|kbd:[-] -|دفن البطاقة - -|kbd:[=] -|دفن الملحوظة - -|kbd:[@] -|تعليق البطاقة - -|kbd:[!] -|تعليق الملحوظة - -|kbd:[r],kbd:[F5] -|إعادة تشغيل الوسائط - -|kbd:[z] -|تراجع -|=== - -=== محرر الملحوظات -|=== -|اختصار | وظيفة - -|kbd:[Ctrl+Enter] -|حفظ الملحوظة - -|kbd:[D] -|تحديد الرزمة - -|kbd:[L] -|محرر قوالب البطاقات - -|kbd:[N] -|تحديد نوع الملحوظة - -|kbd:[T] -|تحرير الوسوم - -|kbd:[Ctrl+P] -|معاينة الملحوظة - -|kbd:[Ctrl+B] -|خط غامق - -|kbd:[Ctrl+I] -|خط مائل - -|kbd:[Ctrl+U] -|خط سفلي - -|kbd:[Ctrl+R] -|إضافة خط أفقي - -|kbd:[Ctrl+H] -|إضافة عنوان - -|kbd:[Ctrl+F] -|تغيير حجم الخط - -|kbd:[Ctrl+M] -|إضافة معادلة MathJax - -|kbd:[Ctrl+Shift+C] -|إضافة عبارة ملء فراغات جديدة - -|kbd:[Ctrl+Alt+Shift+C] -|إضافة عبارة ملء فراغات جديدة باستخدام الرقم نفسه - -|kbd:[Ctrl+1..0] -|أضف كود HTML مخصص -|=== - -=== متصفح البطاقات -|=== -|اختصار |وظيفة - -|kbd:[Ctrl+A] -|تحديد الكل - -|kbd:[Ctrl+E] -|تحرير الملحوظة - -|kbd:[Ctrl+D] -|تغيير الرزمة - -|kbd:[Ctrl+K] -|تعليم الملحوظة - -|kbd:[Ctrl+Alt+R] -|إعادة جدولة -|=== - - -=== محرر قوالب البطاقات -|=== -|اختصار |وظيفة - -|kbd:[Ctrl+P] -|معاينة التغييرات - -|=== - - - -[[betaTesting]] -== تجربة النسخ التجريبية -إذا كنت تريد تجربة آخر الميزات في أنكيدرويد، تستطيع التسجيل في برنامج تجربة النسخ التجريبية كالتالي: - - . رز https://play.google.com/apps/testing/com.ichi2.anki[صفحة Google Play للنسخ التجريبية] - . اضغط *Become a beta tester* (كن مستخدمًا مجربًا) - -بعد هذه الخطوات، سيُنصَّب الإصدار التجريبي الأخير من قبل Google Play كما تنصب التحديثات العادية. -إذا كنت تحب المغامرة أكثر، تستطيع أن تصبح مجرب نسخ الألفا (alpha) أيضًا بالانضمام إلى -https://groups.google.com/forum/#!forum/ankidroidalphatesters[مجموعة مجربي الألفا]، بالإضافة إلى إجراء الخطوات السابقة لنسخ البيتا (beta). - -الرجاء الإعلام عن أي أعطال تجدها في نسخ التطوير من خلال متعقب أخطاء أنكيدرويد، كما هو موضح في -link:help-ar.html[صفحة المساعدة]. - -إذا كنت تريد ترك البرنامج التجريبي في أي وقت، زر https://play.google.com/apps/testing/com.ichi2.anki[صفحة Google Play للنسخ التجريبية] واضغط *Leave the test* (ترك الاختبار). - -[[contributing]] -== المساهمة في أنكيدرويد -إن أنكيدرويد مشروع مفتوح المصدر، ويعتمد تطويره على مساهمات المتطوعين. إليك بعض طرق المساهمة في أنكيدرويد: - -المشاركة :: أعط تقييمًا للتطبيق، أو انضم إلى https://groups.google.com/forum/#!forum/anki-android[منتدى أنكيدرويد] -وأجب عن أسئلة المستخدمين الآخرين، أو أعلم عن الأخطاء، أو كن <>، إلخ. -يمكن الوصول إلى معلومات أكثر حول المساهمة كغير مطور في https://github.com/ankidroid/Anki-Android/wiki/Contributing[الويكي]. - -الترجمة :: ترجمة تطبيق أنكيدرويد ودليل الاستخدام هذا مساهمة من قبل المستخدمين، ومُقدَّرة كثيرًا. -انظر https://github.com/ankidroid/Anki-Android/wiki/Contributing#translate-ankidroid[صفحة ويكي الترجمة] -لتعليمات مفصلة حول المساهمة في الترجمة. - -التطوير :: الشفرة المصدرية لأنكيدرويد متوفرة على https://github.com/ankidroid/Anki-Android[صفحة Github]. ونرحب بإصلاحات الأعطال والميزات الجديدة أيضًا. -قبل قضاء كثير من الوقت في العمل على ميزة جديدة، فقد ترغب أولًا في السؤال في المنتدى عما إذا -كان من الممكن أن تُدمج مع المشروع الرئيسي، حيث لا تُقبل كل الميزات الجديدة. -إذا كنت مبتدئًا في برمجة أندرويد، فلا تتردد في السؤال في المنتدى عن إرشادات أو مهام مناسبة للمبتدئين. diff --git a/manual-ja.asc b/manual-ja.asc deleted file mode 100644 index a2f2706..0000000 --- a/manual-ja.asc +++ /dev/null @@ -1,768 +0,0 @@ -:docinfo1: -:toc: - -= AnkiDroid 2.14 マニュアル -:sectanchors: - -[.text-right.big] -link:manual.html[English] - -== はじめに - -AnkiDroidをお使いいただき、ありがとうございます。AnkiDroidは、よく使われているSRS(訳注:間隔反復システム。復習までの時間を管理することで効率よく暗記する方法)ソフト - http://ankisrs.net/[「Anki」] (対応OS: Windows / Mac / Linux / BSD)の、Android用クライアントアプリです。 - -AnkiDroidは、このAnkiと連携して使うことを想定して作られています。Ankiを全く使わずに学習することも、オンライン上で共有されているデッキ(=カードのセット)をダウンロードするなどすればできなくはありませんが、 -Ankiでのみ実行できる機能や、Ankiで実行するほうがずっと効率的な機能もあります。なお、このマニュアルで使われている用語を理解するため、Anki自体のマニュアルのうち、少なくとも http://wikiwiki.jp/rage2050/?2.0%2FTheBasics[「基本」の節] を読んでおくことを**強くおすすめ**します。 - -もし探している事柄がこのマニュアルに書かれていなかった場合は、 https://github.com/ankidroid/Anki-Android/wiki[AnkiDroidのWiki] を確認してください。更新履歴、バグレポートや新機能リクエストを投稿するための手順、FAQ(よくある質問)などを見ることができます。 - -[[gettingStarted]] -== 使ってみる - -AnkiDroidを使い始めるには、まず何か学習するためのカードを用意する必要があります。メイン画面で、右下の大きな青いボタンをタップすると、新しいカード用のノートを追加したり、共有デッキ(他の人が作成してオンライン上で共有しているデッキ)をダウンロードしたり、新しい空のデッキを作成したりすることができます。 - -この https://www.youtube.com/watch?v=F2K1gOSdIZA[チュートリアル動画](約5分・日本語字幕対応)では、AnkiDroidでのカードの追加方法、ダウンロード方法、学習方法を紹介しています。より詳しい情報はこのマニュアルに記載されています。 - -もしAnkiを既にお使いで、PC上のデッキをAnkiDroidに取り込みたいという場合は、 - <> の節に進む方がよいかもしれません。 - -[[deckPicker]] -== デッキリスト - -*注意:* この節の内容は、Ankiにおける http://wikiwiki.jp/rage2050/?2.0%2FTheBasics[デッキとカード] がどういったものなのかを理解していることを前提としています。 - -AnkiDroidを起動すると、デッキ(=カードのセット)のリストの画面が表示されます。あなたのカードは全て、このリスト内のデッキに含まれています。この画面では以下のような操作ができます。 -++++++++++ - -++++++++++ - -=== 追加ボタン -画面右下の水色の大きな「+」ボタンは、AnkiDroidに新しいコンテンツを追加するために使います。このボタンを押すと次の3つのオプションが表示されます。これらの操作は https://www.youtube.com/watch?v=F2K1gOSdIZA[チュートリアル動画]で見ることができます。 - -ノートを追加 :: 新しいカード(のためのノート)をAnkiDroidで作りたい時にこのオプションを選んでください。「ノート」と「カード」はAnkiでは特殊な意味を持っています。これは http://wikiwiki.jp/rage2050/?2.0%2FTheBasics[Ankiのマニュアルの「基本」の節]で説明されています。ノートを追加するための簡単な紹介であるチュートリアル動画を見てください。より詳しい情報は、この後の <> に記載されています。 - -共有デッキを取得 :: 他のユーザーが提供したデッキ(=カードのセット)をダウンロードするために、インターネット上の「AnkiWeb」のページを表示します。 - . ネットに接続されていることを確認する - . デッキリスト画面の右下にある、「+」印の丸いボタン(追加ボタン)をタップし、このボタン(「共有デッキを取得」)をタップする。AnkiWebが開く - . カテゴリーから選択するか、検索語を入力する - . 試してみたいデッキの「Info」をタップ - . 下までスクロールし、「Download」をタップ - . ブラウザがダウンロードを開始し、終了すると完了の通知が表示されるので、それをタップ - . AnkiDroidの画面に戻り、確認のダイアログが表示される。「追加」ボタンをタップ - . インポートが終了次第、学習準備完了 - -デッキを新規作成 :: 新しい、空のデッキを作成します。 - . デッキリスト画面の右下にある、「+」印の丸いボタン(追加ボタン)をタップし、このボタン(「デッキを新規作成」)をタップする。 - . デッキに名前を付ける(例:「英単語」) - . そのデッキに、上記の「ノートを追加」の説明に沿ってカードを追加する - - -これらの使い方のデモを https://www.youtube.com/watch?v=F2K1gOSdIZA[チュートリアル動画] で見ることができます。 - -=== アクションバー - -AnkiDroidの各画面の上部には、他のアプリと同様にアクションバーが置かれており、ボタンがいくつか用意されています。デッキリスト画面のアクションバーからは次のような操作が可能です。 - -ナビゲーションメニューボタン :: アクションバー左端のアイコン(「≡」の形のマーク)をタップすると <> が表示され、主な画面にすばやくアクセスすることができます。 - -同期ボタン :: 回転する矢印のボタンは、デッキをクラウドストレージと同期するために使います。 -詳しくは <> で説明します。 - -「その他」ボタン :: アクションバー右端のアイコンをタップすると、比較的使用頻度の少ない操作のメニューが表示されます。これらの操作については後述します。 - - ヒント:アクションバーのボタンを長押しすると、そのボタンの機能を示す文字が表示されます。(ナビゲーションメニューボタンと「その他」ボタンでは表示されません) - -=== 学習する -カードの学習を始めるには、そのカードが入っているデッキの名前の部分をタップしてください(10インチ以上のタブレットでは、その次に「学習開始」ボタンをタップしてください)。AnkiDroidが学習モードに移ります。 - -なお、選択中のデッキは、文字の背景が灰色となって強調されます。また、<> は青色のフォントで強調されます。フィルターデッキについては後述します。 - -=== その他のデッキの操作 -デッキを長押しすると、デッキに対して可能なその他の操作のメニューが表示されます。 - -このデッキの名前を変更 :: デッキの名前を変えたいときにはこれを使ってください。 - -デッキ オプション :: デッキオプションを使うと、デッキごとの学習オプションを設定することができます。 -オプションの詳細については、 http://wikiwiki.jp/rage2050/?2.0%2FDeckOptions[Ankiのマニュアルの該当部分] を参照してください。 - -カスタム学習 :: 通常のスケジュール(訳注:Ankiシステムによって自動的に設定される)以外の学習をしたい際に便利な機能があらかじめ準備されています。例えば、一日の学習枚数の上限をその日だけ上げる、といったメニューがあります。詳細については <> の節を参照してください。 - -このデッキを削除 :: デッキを削除したいときにはこれを使ってください(注意:この操作自体を取り消すことはできませんが、 <> ことは可能です)。 - -このデッキをエクスポート :: この機能は、デッキを他のユーザーと共有するために使うことができます。詳しくは <> の節を参照してください。 - -再構築 / 全て戻す :: 選択中のデッキが <> の場合、「再構築」(カードの抽出条件によって再度カードを抽出し直す)と「全て戻す」(デッキ内のカード全てを元のデッキに戻す)、という選択肢も表示されます。 - -=== デッキリスト上でタップ操作可能なエリア -デッキリスト上の各行は、タップ操作可能な3つのエリアに分かれています。 - -デッキ エキスパンダー :: もし -http://wikiwiki.jp/rage2050/?2.0%2FTheBasics#h2_content_1_1[サブデッキ]が使われている場合は、デッキエキスパンダーボタンがデッキの左端に表示されます。このボタンをタップすると、そのデッキのサブデッキを表示したり非表示にしたりすることができます。「˃」のアイコンは、そのデッキには非表示中のサブデッキがあり、それを表示する(展開する)こともできるということを意味し、「˅」のアイコンは、そのデッキのサブデッキを表示中であり、それを非表示にする(折りたたむ)こともできるということを意味します。これらのアイコンがない状態は、そのデッキにはサブデッキがないということを意味します。 -なお、サブデッキは「上位デッキ名::サブデッキ名」(例:「英語::英文法」)のようにデッキ名を入力することで作成できます。 - -デッキ名 :: タップ操作可能なエリアのうち、最も肝心な部分です。この部分をタップすると、学習するカードがある場合は学習画面が表示されます。 - -カウントボタン :: 各デッキの右端にある3組の数字の部分は、デッキ名部分とは別のエリアです。このエリアをタップすると、学習画面ではなくデッキ概要画面が表示されます。このボタンは、そのデッキで学習できるカードの数を手早く確認したい時に便利です。 - -=== 高度な操作 -使用頻度が比較的低いと思われる機能は、アクションバー右端のボタンを押すと表示されるメニューから選ぶことができます。 - -操作を元に戻す :: 学習セッションで最後のカードを学習した際の操作を取り消したい場合にこのボタンを使います。 - -データベースをチェック :: データベース内の様々な不具合を自動的に修正します。また、どのカードにも使用されていないタグを削除します。コレクションに何か問題が生じたと思った場合は、まず最初にこの機能を試してみてください。 - -メディアをチェック :: メディアの同期で何か問題が生じた際にこの機能を試してみてください。 - -無効なカードをチェック :: コレクション内に無効なカード(必要な情報を削除したことにより、表側が表示できないカード)があるかをチェックします。その後、無効なカードが見つかった場合、それらを一括削除することもできます。詳しくは、 http://wikiwiki.jp/rage2050/?cmd=read&page=2.0%2FCardsAndTemplates&word=%B6%F5%C7%F2%A4%CE%A5%AB%A1%BC%A5%C9#h2_content_1_8[Ankiのマニュアルの該当部分]をご覧ください。 - -バックアップから復元 :: AnkiDroidの<>ファイルを使い、コレクションを復元することができます。 - -ノートタイプを管理 :: ノートタイプの追加、編集、削除をすることができます。詳しくは、<>の項をご覧ください。 - -インポート :: デッキの情報が記録された専用ファイル(ankiファイル(*.apkg))をインポート(読み込み)します。詳しくは、<>の項をご覧ください。 - -エクスポート(全デッキ) :: コレクション全体を「collection.apkg」というファイルとして書き出します。詳しくは <> の項をご覧ください。 - -=== デッキ カウント -各デッキ名の右側に、3種類の数字が表示されています。左端の青い数字は、 -今日新しく学習する必要があるカードの数を表しています。Ankiでは、未設定の場合、新規カードを一日につき20枚学習するよう設定しますが、 -この数は必要に応じて設定することができます。真ん中にある赤い数字は、 -今日学習することになっているカードのうち、現在「学習中」(基本学習中または再学習中)状態のカードの数を表します。 -右端の緑の数字は、今日復習することになっているカードの数です(つまり、すでに「学習中」状態を終えているカードです)。 -まだ学習したことがないデッキについては、赤と緑の数字は両方ともゼロになっています。(訳注:AnkiをはじめとするSRSでは、「このカードはすっかり覚えたし、10日後にもう一度復習しよう」とか「このカードは今日のうちにもう一度見ておこう」とかいったことは、人間の記憶能力を考慮したアルゴリズムで自動的に決定されます。詳細についてはAnkiのマニュアルを読むことをおすすめします) - -既に述べた通り、これらの数字部分をタップすると、デッキ概要画面に移動します。 - - -[[drawer]] -== ドロワーメニュー -++++++++++ - -++++++++++ - -このアプリのほとんどの画面において、アクションバー左端のアイコンをタップするか、 -あるいは画面左の外側からスワイプするかでドロワーメニューを開くことができます。 -このメニューを使って、アプリの各画面にすばやく移行することができます。具体的には、以下のような画面を開けます。 - -デッキリスト :: デッキのリストが表示されるトップ画面( <> ) -カードブラウザ :: カードの一覧が表示される画面( <> ) -統計 :: 学習の進行状況を確認するための画面( http://wikiwiki.jp/rage2050/?2.0%2FGraphsAndStatistics[詳しくはAnkiのマニュアルで] ) -ナイトモード :: ダークグレーを基調としたデザインに切り替わります。目が疲れにくい画面とされており、暗い場所などでの学習でもおすすめです。ナイトモードで使用されるカードの背景とフォントの色のカスタマイズについては、 https://github.com/ankidroid/Anki-Android/wiki/Advanced-formatting#customize-night-mode-colors[Wiki] をご覧ください。 -設定 :: AnkiDroidの各種設定をする画面( <> ) -ヘルプ :: このページを開く -フィードバック :: AnkiDroid開発チームに連絡する - -[[deckOverview]] -== デッキ概要画面 -++++++++++ - -++++++++++ -デッキリスト画面でデッキカウントの部分をタップすると、デッキ概要画面に移動します。(タブレット端末の画面では、このデッキ概要画面はデッキリストの右側に常に表示されています。) - -この画面では、このデッキ内のカード枚数についての概要を見ること、カスタム学習セッションの作成、フィルターデッキ内カードの再構築・返却、学習オプションの変更、といったことができます。「学習開始」ボタンが表示されている場合は、そのボタンをタップすると、そのデッキの学習画面に移動します。 - -=== アクションバー -アクションバーとは、画面上部の水色の部分を指します。デッキ概要画面のアクションバーに表示されるアイコンは、そのデッキが通常のデッキなのかフィルターデッキなのかによって異なります。通常のデッキの場合は、次のアイコンが表示されます。 - -カスタム学習 :: スパナ(レンチ)のマークのアイコンです。タップすると、通常のスケジュール(訳注:Ankiシステムによって自動的に設定される)を超えて学習をしたり、デッキの中の特定のカードだけについて学習したり、といったカスタム学習セッションを作成することができます。詳細は <> を参照してください。 - -一方、フィルターデッキの場合は、次のアイコンが表示されます。 - -全て戻す :: 「×」マークのアイコンです。タップすると、そのフィルターデッキ内の全カードを、それぞれの元のデッキに戻して、フィルターデッキを空にします。 - -再構築 :: 一つの矢印が回転しているアイコンです。タップすると、デッキオプションの「フィルター」の項目の設定にしたがって、カードを改めて抽出し直します。 - -右端の「その他」ボタンを押すと表示される機能は以下の通りです。 - -デッキ オプション :: 選択中のデッキに関係するいくつかのオプションを設定できます。 -例えば、新規カードや復習カードの、1日あたりの表示枚数などがここで設定できます。 -詳細は、 http://wikiwiki.jp/rage2050/?2.0%2FDeckOptions[Ankiのマニュアルのデッキオプションの項目] を参照してください。 - - -[[reviewer]] -== 学習画面 -デッキリスト画面でデッキ名をタップするか、デッキ概要画面で「学習開始」ボタンを押すと、学習画面に移動し、実際に学習をすることになります。 -++++++++++ - -++++++++++ - -=== 基本 -今までにAnkiを使ったことがないのであれば、この先を読む前に -http://ankisrs.net/docs/manual.html#_intro_videos[入門用動画] を見てみたほうがよいかもしれません(訳注:英語です)。 -基本的な学習の手順について説明しています。 - -画面の左上に、3つの数字が表示されています。それぞれ左から順に、 -新規カードの数、学習中(基本学習中または再学習中)カードの数、復習カードの数に対応します。 -これが何を表しているのかは、先述のAnkiの入門用動画により詳しく説明されていますので、 -一度 http://ankisrs.net/docs/manual.html#_intro_videos[見てみてください。] -(訳注:しつこいようですが英語です) - -さて、カードを見てみて、問題の答を思い出すことができたら、 -あるいはさっぱり思い出せないと思ったら「解答を表示」ボタンを押してください。そうすると、画面下部には2〜4つの評価回答用のボタンが表示されます。 -いくつ表示されるかは、これまでにどのように答えたかによって変動します。 -それぞれの評価回答ボタンには、「10分」や「5日」といった形で時間が表示されているはずです。ボタンをひとつ選んで押すと、そのカードは表示された時間の後に再表示されます。つまり、「5日」のボタンを選んだらそのカードは5日後にまた出題される、ということです。 -どの程度しっかり覚えていたかを自分で評価して、どれかボタンを選んでください。 - -すばやく学習操作をするため、ボタンを直接押すかわりに対応するジェスチャー(例えばタップやスワイプなど)を設定しておくこともできます。 -ジェスチャーの設定については、 <> を参照してください。 - -=== アクションバー -学習画面においても、上部のアクションバーにはよく使う操作のためのボタンが配置されています。なお、表示されるボタンの数は、端末の画面サイズによってAndroidシステムが自動的に決定しています。画面にボタンがすべて入りきらない場合、入らなかった操作はメニューから実行することができます。またそれぞれのボタンの意味がよく分からなければ、長押しすると何の操作なのかが表示されます。学習画面では、次のような操作が可能です。 - -元に戻す :: 最後に学習したカードについて、選択した評価を取り消し、学習前に戻します(このボタンは必ず表示されます)。 -カードをマーク :: ブラウザで探しやすいように、現在のノートに「marked」(マーク付き)というタグをつけます。この機能は、そのノートについて後で何かしようと思ったとき、例えば「家に帰ってから辞書で調べてみよう」などというときに便利です。また、マーク付きのカードは、学習画面では右上に星印が表示されます。 -カードの編集 :: ノートの編集画面を開き、表示される内容を書きかえることができます(さらに詳しいことは、 <> を参照してください)。 -延期、保留、削除 :: 表示中のカードやノートについて、学習スケジュールからはずすための方法をいくつか選択できます(詳しくは http://wikiwiki.jp/rage2050/?2.0%2FStudying#editing-and-more[Ankiのマニュアル] を参照してください)。 -音声・動画の再生 :: カードに音声ファイルや動画ファイルが付いていれば、それを再生します。 -ホワイトボードを有効にする / ホワイトボードを無効にする :: この操作では、現在のデッキについてホワイトボード機能を有効にしたり無効化したりします。ホワイトボード機能を使うと答えを画面に手書きで描くことができ、漢字を勉強する場合などに有効です。ホワイトボードが有効になっていると、学習画面でさらに二つの操作、ホワイトボードの消去と非表示ができるようになります。ホワイトボードを無効にすれば、ホワイトボードだけでなくこの二つの操作も無効化されます。 -デッキ オプション :: 選択中のデッキ特有の学習オプションを開きます。詳しくは http://wikiwiki.jp/rage2050/?2.0%2FDeckOptions[Ankiのマニュアルの該当部分]を参照してください。 - -=== 学習の終了 - -その日に学習することになっているカードをすべて終えると、デッキリスト画面に戻り、「おめでとうございます」のメッセージが表示されます。その後、この画面から他のデッキをタップして学習を続けることもできますし、。今日はもうおしまいにしようという場合は、単純に端末のホームボタンを押してAnkiDroidを終了することもできます(また、学習の途中でこのように終了することも可能です)。 - -「おめでとう」画面が表示されたあとも同じデッキで学習を続けたい場合(訳注:試験前の詰め込み勉強など)、 <> を参照してください。 - - -[[addingNotes]] -== ノートの追加 - -*注意:* この節の内容は、Ankiにおける http://wikiwiki.jp/rage2050/?2.0%2FTheBasics#notes-and-fields[ノート、フィールド、カードテンプレート、ノートタイプ] がどういったものなのかを理解していることを前提としています。 -(訳注:特に「ノート」と「カード」がどう違うのかは重要です) - -新規ノートを追加するには、デッキリスト画面右下の「+」ボタンをタップし、「ノートを追加」をタップしてください。 - -++++++++++ - -++++++++++ - -ノート追加画面は、以下のような構成になっています。 - -ノート :: 追加したいノートのタイプを選択できます。大抵の場合は「Basic」ノートタイプで問題ないと思いますが、例えば、表と裏を逆にしたカードも合わせて生成したい場合には「Basic (and reversed card)」ノートタイプが使えます。 - -デッキ :: このノートから生成されるカードがどのデッキに入るのかを変更することができます。 - -フィールド :: デッキ選択プルダウンの下に、このノートのフィールドが表示されています(例えば、「Basic」ノートタイプの場合、「Front」と「Back」の二つのフィールドがあります)。フィールドをタップするとソフトウェアキーボードが表示され、文字を入力できるはずです。 - -メディアボタン :: それぞれのフィールドの隣にあるクリップマークのボタンです。ここから、ノートにメディアデータを添付することができます(この機能は現在のところ実験段階です)。「画像を追加」では、端末のカメラ(あれば)から、またはフォトライブラリーから画像を添付することができます。「音声を録音」では、端末の機能で音声を録音し、ノートに添付できます。「高機能エディター」を使うと、自動的に訳語や発音の音声ファイルをオンライン上で検索できます。 - -タグ :: タップすると、ノートにタグをつけたりはずしたりするためのダイアログを表示します。 - -カード :: 選択中のノートタイプで生成されるカードの名前を表示します。このボタンを押すとダイアログが表示され、そのノートタイプのカードテンプレートのソースコードを確認できます。ここでは、テンプレートの編集、プレビュー、追加、削除が可能です。カードテンプレートについてのさらに詳しい情報は、Ankiのマニュアルの http://wikiwiki.jp/rage2050/?2.0%2FCardsAndTemplates[カードとテンプレートの節] を参照してください。 - -入力が終了したら、アクションバー右側のチェックマークのアイコンをタップすると、実際に登録されます。あるいは、保存せずに元の画面に戻りたい場合、アクションバーのアプリアイコンをタップするか、端末の「戻る」ボタンを使ってください。 - -[[editingNotes]] -== ノートの編集 - -学習中に「編集」を選ぶか、カードブラウザで対象のカードの行をタップするとノート編集画面になります。編集画面は上述の新規ノートの追加画面と似ていますが、以下のような点で違いがあります。 - - * デッキの変更は、現在の選択中のカードテンプレート(「カード:」欄で下線つきで表示されています)のカードでのみ行われます。つまり、複数のカードがあるノートタイプの場合、現在選択中のカード以外のデッキは変更されません。 - * ノートタイプを変更すると、「ノートタイプ編集モード」に変わります。このモードでは、ノートの内容の変更(デッキの変更やフィールドの内容の書き換えなど)はできません。また、フィールドが三つ以上のカスタムノートタイプが関係している場合、それぞれのフィールドを新しいノートタイプのどのフィールドに対応させるかを選択するボタンが表示されます。 - -もし元のノートタイプよりもカードテンプレートの数が少ないノートタイプを選択した場合、前から順に、少ない方の数のカードテンプレートだけが保持されます。例えば、ノートタイプを「Basic (and reversed card)」(このノートタイプのカードテンプレートは「Card 1」と「Card 2」の2枚)から「Basic」(カードテンプレートは「Card 1」の1枚のみ)に変更した場合、一枚めのカード(「Card 1」のカード)だけが残り、二枚めのカード(「Card 2」のカード)は消えてしまいます。警告のため、この場合「カード:」欄の中は赤字で表示され、保存すときには確認のダイアログが表示されます。 - - ヒント: 複数のノートのタイプを一度に変更したり、カードの対応をカスタマイズしたりする場合、Ankiの「ノートタイプを変更」機能を使ってみてください。 - -また、アクションバーの「その他」ボタンをタップして表示されるメニューは次の通りです。 - -ノートの追加 :: 新しく空のノートを追加します。 -カードをコピー :: 現在のノートをコピーして、新しいノートの追加画面を開きます。 -学習進行状況をリセット :: 現在のカードを新規カードとして扱います。このカードをこれまで学習した情報(訳注:何回学習したか、そのつどどの評価回答ボタンを押したか、など)が消去されます。ただしカードの編集履歴は残ります。 -スケジュールを変更 :: 現在のカードを何日後に復習するかを設定できます。この機能は、ある程度学習したことのあるデッキをインポートし、始めから復習間隔を長く設定したい場合などに有効です。 - -[[browser]] -== カードブラウザによるカードの一覧、検索 - -<> で「カードブラウザ」をタップすると、カードの一覧表示や検索を行う画面が表示されます。 - -++++++++++ - -++++++++++ - -カードブラウザ画面を開いた時は、選択中のデッキ内のすべてのカードが表示されています。アクションバー右側の虫めがねアイコンをタップすると、選択中のデッキのカードから検索ができます。また、アクションバーのドロップダウンリスト(デッキタイトルが表示されている部分)から、どのデッキを(あるいはすべてのデッキを)選択するか指定することもできます。 - -初期設定では、カードブラウザの左側の列には、カードの質問(つまり表側)のテキストが表示され、右側の列には、カードの解答(つまり裏側)のテキストが表示されます。 - -左側の列は、より簡潔に表示するために、 http://wikiwiki.jp/rage2050/?2.0%2FAddingMaterial#customizing-fields[「ソートフィールド」]を表示するよう設定することもできます。右側の列は、様々な項目を設定することができます。これらは、列見出しをタップすると表示されるドロップダウンメニューで選択できます。 - -なお、各列の内容は、カードのリスト内をスクロールするつど動的に計算されて表示されます。 - -検索結果の一覧で、特定のカードをタップすると編集ができ(上記 <> を参照)、長押しするとメニューが表示されて以下の操作をすることができます。 - -ノートにマーク / マークを解除 :: 選択されたノートに「marked」(マーク付き)のタグをつけたり、はずしたりします。マーク付きノートのカードは紫色で表示されます。 -カードを保留 / カードの保留を解除 :: 保留されたカードは黄色で表示され、学習時に出題されなくなります。 -ノートを削除 :: 選択されたカードのノートを削除し、そのノートに属するすべてのカードも削除します。この操作は、 <> 以外に取り消す方法はありません。 -プレビュー :: 選択されたカードを、学習時に表示されるような形式で表示します。 - -=== 検索 - -AnkiDroidでも、Ankiで使うことができる検索形式をすべて使うことができ、複雑な検索に役立ちます。以下に例をいくつか示します。 - - tag:marked :: 「marked」のタグがついたカードを検索します。 - is:due :: 復習しなければいけない時期になっているカードを検索します。 - front:rabbit :: frontフィールドが「rabbit」であるカードを検索します。 - -利用可能な検索機能の一覧は、 http://wikiwiki.jp/rage2050/?2.0%2FBrowser#searching[Ankiのマニュアル] に記載されています。 - -また、よく使われる検索条件(マーク付き、保留、タグなど)については、キーボードで手入力しなくてもメニューから選んで使うこともできます。 - -[[filtered]] -== フィルターデッキ - -Ankiは、学習過程を最適化し、カードの大部分を覚えるために必要最小限の学習ですませられるように設計されています。「おめでとう」画面が表示されたら、それ以上学習を続けるとこの効率性をそこなうことになります。つまり、さらに時間を費して同じカードを何度も学習したとしても、大抵の場合、それ以降で適切に記憶を強化していく過程に比べるとたいした意味がないのです。 - -とはいえ、試験が迫っていたり、単にしばらく暇をつぶしたかったりする時に、「おめでとう」画面が表示されたあとも学習を続けることは可能です。 - -「フィルターデッキ」とは、「今日思い出せなかったもの」や「『難しい』タグがついたもの」など、いろいろな基準で集められたカードからなる一時的なデッキです。フィルターデッキで学習した後、あるいはフィルターデッキが削除されたら、含まれていたカードは自動的に元のデッキに戻されます。 - -フィルターデッキを作成する一番簡単な方法は、デッキリスト画面でデッキ名を長押しし、表示されたメニューで「カスタム学習」を選択することです。 - -AnkiDroidの操作に慣れてきたら、デッキリスト画面の「その他」メニューから「フィルターデッキを作成」を選ぶことで、手動でフィルターデッキを作成することもできます。 - -フィルターデッキについてのさらに詳しい情報は、 http://wikiwiki.jp/rage2050/?2.0%2FFilteredDecksAndCramming[Ankiのマニュアル] を参照してください。 - -[[AnkiDesktop]] -== Ankiとあわせて使う - -Ankiには、AnkiWebという無料の同期サービスがあり、デッキをモバイル端末とPCで簡単に同期しておくことができます。もし何かの理由でこの同期サービスが使えない場合、USB接続を使うこともできますが、そちらの方法のほうが手間がかかります。 - -注意:AnkiDroidはAnkiやAnkiWebの開発・管理には関わっていません。AnkiDroidはAnkiをもとに作られましたが、Ankiから完全に独立したコミュニティー(ボランティアユーザーの集まり)によって開発・管理されています。 - -++++++++++ - -++++++++++ - -=== クラウド経由の同期 - -AnkiWebを使う前に、まずアカウントを作成する必要があります(もし以前にAnkiWebを使ったことがあれば、飛ばしてください)。 https://ankiweb.net にアクセスし、「サインアップ」ボタンを押してください。AnkiWebにログインできたら、他端末内の既存のデッキのデータをAnkiDroidに入れたいのか、その逆にAnkiDroid内のデッキのデータをAnkiWebに出したいのかに応じて、以下の対応する説明に進んでください。 - -==== 新規にインストールしたAnkiDroidに既存のデッキを同期する -以前に作成したAnkiのデッキがあり、新規にインストールしたAnkiDroidにそのデッキをコピーしたい場合、AnkiWebでの同期によってそれを行うことができます。その既存のデッキが入っている状態でAnki(または、別のスマートフォンやタブレットで使っているAnkiDroid)を起動してください。次に、デッキリスト画面右上の同期ボタン(2つの矢印が回転しているアイコン)を押してください。 - -もしAnkiWebを使うのが初めてであれば、IDとパスワードの入力が必要になります。それから、「AnkiWebにアップロード」ボタンを押してください。AnkiWeb上の空のコレクションが、既存のデッキで上書きされます。Ankiはデッキ中のカードとメディアファイル(画像・音声・動画)を全てアップロードするので、メディアファイルがたくさんあれば、同期が完了するまで少し時間がかかるかもしれません。 - -データのアップロードが終了したら、既存のデッキのコピー先にしようとしている端末内のAnkiDroidを開き、<>画面のアクションバーにある「*同期*」ボタンをタップしてください。AnkiWebのIDとパスワードを入力すると、AnkiDroidはAnkiWeb上のすべてのカードとメディア情報をダウンロードし、アカウント情報を保存します。 - -もし、同期を実行する前にAnkiDroidにカードが存在している場合、AnkiWebからダウンロードするかAnkiWebにアップロードするかを選択するよう表示されるかもしれません。AnkiDroidに存在しているカードが消えてもいいという場合は、単に「ダウンロード」を選んでください。一方、AnkiWeb内のカード情報とAnkiDroid内のカード情報とを統合する必要がある場合は、操作を続行する前に <> の内容を理解しておくことを強くおすすめします。 - -最初の同期が完了したら、あとはいつでも好きなときに同期ボタンを押して、データの変更分をクラウドと同期することができます。前回同期した時点からの差分だけが送信されるので、二回目以降の同期はずっと速くなります。 - -また、その後でPCのほうで新規カードを追加して、それをAnkiDroidに同期したくなった場合、ここまでと同様に操作することになります。つまり、PC上でまず同期して(あるいは、単にAnkiを終了してもよいです。設定を変えていなければ、終了時に自動的に同期されます)、それからAnkiDroidで同期ボタンをタップするわけです。 - -==== AnkiDroidからPCに同期する - -AnkiDroidの側からPCに同期する場合も、基本的にはPCからAnkiDroidに同期する場合と同様の操作を行いますが、順番が逆になります。 - -まず <> で、右上の同期ボタンを押します(丸い二本矢印のボタンです)。もしAnkiWebを使うのが初めてであれば、IDとパスワードの入力が必要になります。それから、最初に「アップロード」ボタンを押して、明示的にAnkiDroid上のデッキをAnkiにアップロードします。 - -同期が完了したら、Ankiを開いて、右上の同期ボタン(円の中にふたつ矢印があるボタンです)を押してください。AnkiDroidからアップロードされたデータをダウンロードします。 - -[[AnkiWebConflicts]] -==== 同期で矛盾が生じた場合の処理 - -あまり起きるはずのないことですが、AnkiDroid上のデータを自動的にAnkiWeb上のデータと合成できないという場合があります。このような場合、矛盾が生じたデータについては、AnkiWebにアップロードするかAnkiWebからダウンロードするかを明示的に選ぶ必要があります。どちらを選んだ場合も、もう一方の側に元からあったデータは上書きされてしまいます。 - -また、もし同期する両方の側に新しいカードがあって、しかもどちらも消したくないような場合は、 <> を使った方法があります。まず先にAnkiDroidで新規カードの入っているデッキのエクスポートをしておき、それから同期して、「ダウンロード」を押してAnkiWebからダウンロードします(AnkiDroidのデータを上書きします)。同期が完了したら、先にエクスポートしておいたデッキをインポートすることができます。詳しくは <> を参照してください。 - -=== USB接続を使った同期 - -インターネットに接続できない場合でも、USB接続を使ってデッキを相互にコピーすることは可能です。 - -USB接続を使った方法では、全てのデッキを一度にまとめてインポート・エクスポートします。従って、AnkiWebを使った同期とは異なり、PCとAnkiDroidの両方でデッキを変更してその変更を合成する、といったことはできません。そうではなく、たとえばPC上で新しくカードを追加しようと思うなら、まず、モバイル端末上の最新の状態のデッキデータがPCにエクスポートされていることを確かめておかないといけません。そうでなければ、最後にPCにエクスポートした後で行なった学習や編集などに関する情報は、すべて消えてしまうことになります。 - -そこで、典型的な作業手順としては、まずモバイル端末のデータをエクスポートして、それをPCにインポートし、それからPCで何かの変更を行い、最後にデータを再びモバイル端末に戻す(PCからエクスポート、AnkiDroidでインポート)、というものになります。 - -なお、AnkiDroidは(訳注:Ankiと異なり)テキストファイルを直接インポートすることはできません。もしどうしてもそうしたければ、PC上で行ってからAnkiDroidにインポートする、という手順が必要になります。 - -==== Ankiのすべてのデッキを、USB接続でAnkiDroidにコピーする - -まずPCで次のように操作してください。 - - . Ankiを起動する - . メニューの、「ファイル」→「書き出す」を選ぶ - . 「書き出す...」ボタンをクリックする。このとき、「対象」が「全てのデッキ」になっていることを確認すること。AnkiDroidではデッキを個別にインポートすることはできない。また「スケジュール情報を含める」がチェックされていることも確認すること - . デスクトップにcollection.apkgというファイルが作成される。もし何か違う名前のようであれば、操作を間違えているので、前のステップに戻ること - . Android端末をUSBケーブルでPCに接続する - . PCのエクスプローラで、接続されたAndroid端末を開く - . AnkiDroidのフォルダを開く - . デスクトップのcollection.apkgを、開いたAnkiDroidフォルダにドラッグする - -それから、AnkiDroidで次のように操作してください。 - - . デッキリスト画面で、メニューから「インポート」をタップする - . 「collection」を選択する - -操作が完了すると、モバイル端末上のデッキは、すべてPCにあったもので置きかえられます。インポート機能についての詳しい説明は、 <> を参照してください。 - -==== AnkiDroidのすべてのデッキを、USB接続でAnkiにコピーする - -AnkiDroidからAnkiにデッキをコピーする操作は、基本的には上と同様ですが、順番が逆になります。 - - . モバイル端末のUSB接続は外しておく - . AnkiDroidのデッキリスト画面で、メニューから「エクスポート(書き出し)」を選ぶ - . 「スケジュールを含める」がチェックされていることを確認して、「OK」ボタンを押す - . 端末をUSBケーブルでPCに接続する - . AnkiDroidで表示されたフォルダにある「collection.apkg」を、PCのデスクトップにコピーする - . PC上でcollection.apkgをダブルクリックし、Ankiにインポートする - -AnkiDroidのエクスポート機能についてのさらに詳しい説明は、 <> を参照してください。 - -[[importing]] -== インポート - -Ankiのデータファイル(.apkg形式)は、AnkiDroidで直接インポートすることができます。それ以外の形式のファイルはAnkiDroidで直接インポートすることはできませんが、ほかの暗記カードソフトのデータの多くはAnkiでならインポートすることができ、それから<>ことが可能です。Ankiでのインポートについては、 http://wikiwiki.jp/rage2050/?2.0%2FImporting[Ankiのマニュアルの「インポート」の節] を参照してください。 - -Ankiと同様に、AnkiDroidにおいても http://wikiwiki.jp/rage2050/?2.0%2FExporting#exporting-packaged-decks[二種類の.apkg形式ファイル] を、ファイル名に基づき区別して扱っています。"collection.apkg"という名前であれば「コレクションパッケージ」と見なされ、AnkiDroidでインポートすると、**既に存在するすべてのデータを置きかえます。**"collection.apkg"**以外の**名前のapkgファイルはすべて「デッキパッケージ」として扱われ、AnkiDroidでインポートすると**既に存在するデータと合成されます。** - -通常のAndroidの操作で.apkg形式のパッケージファイルを開くと、そのままAnkiDroidにインポートされます。あるいは、AnkiDroidの中で手動でインポート操作をすることもできます。 - -=== パッケージファイルを開く - -apkgファイルは自動的にAnkiDroidと関連づけられています。そこで、例えば自分宛てにapkgファイルを添付したメールを送ってその添付ファイルを開くと、AnkiDroidが自動的に起動し、インポートするか確認を求めてきます。「OK」を選ぶだけで、そのapkgファイルの内容がインポートされます。(訳注:ファイルマネージャーアプリの類を使っても便利だと思います) - -=== AnkiDroidで手動でファイルをインポートする - -次のような手順で、手動でapkgファイルをインポートすることもできます。 - - * 端末をUSBケーブルでPCに接続する - * apkgファイルを、PCから端末のAnkiDroidフォルダにコピーする - * AnkiDroidを起動する - * デッキリスト画面のメニューから、「インポート」を選ぶ - * コピーしたapkgファイルを選択する - * 「OK」をタップ - -[[exporting]] -== エクスポート - -AnkiDroidでは、デッキを.apkg形式でエクスポートして、Ankiでインポートしたり他の人と共有したりすることができます。Ankiと同様に、目的に応じて http://wikiwiki.jp/rage2050/?2.0%2FExporting#exporting-packaged-decks[コレクションパッケージかデッキパッケージ] のいずれかの方式でエクスポートすることができます。 - -エクスポートにあたっては、「スケジュールを含める」「メディアを含める」のふたつのオプションがあります。通常は既定のままで問題ありません。なお「スケジュールを含める」をオフにした場合、AnkiDroidはエクスポートしたファイルを他の人と共有するつもりだと推定して、「marked」(マーク付き)と「leech」(訳注:Ankiのマニュアルで「無駄カード」と書かれているもの)のタグを消して綺麗な状態にしてからエクスポートします。 - -=== コレクションパッケージのエクスポート - -Ankiで使うためにエクスポートする場合、普通はすべてのデッキを、学習履歴情報なども含めてデータ全体をエクスポートすると思います。 - -デッキリスト画面で、次のように操作してください。 - - . メニューから「エクスポート(書き出し)」を選ぶ - . オプションは変更せずに「OK」を押す - . もう一度「OK」を押してcollection.apkgファイルを自分自身宛てにメールするか、USB接続を使って手動でファイルをPCにコピーする - -エクスポートされたファイルをPCでインポートするには、 - - . collection.apkgファイルをデスクトップに置く - . ファイルをダブルクリックする。Ankiが起動する - . このインポート操作で、「PC上に既に存在しているデータは、すべてモバイル端末から持ってきたデッキデータで置きかえられる」ということを確認する - . インポートの後は、デスクトップのapkgファイルは消しても問題ない - -=== デッキパッケージのエクスポート - -デッキを他のユーザーと共有したい場合などに、デッキパッケージをエクスポートすることができます。 - -デッキリスト画面で、次のように操作してください。 - - . エクスポートしたいデッキを長押しする - . 「エクスポート(書き出し)」をタップ - . オプションは変更せずに「OK」を押す - . もう一度「OK」を押すと、他のユーザーにメールでエクスポートされたapkgファイルを送ることができる - -[[backups]] -== 自動バックアップ - -AnkiDroidは、自動的にデータのバックアップを作成しています。バックアップには、カードすべてと統計情報が含まれますが、音声や画像ファイルは含まれません。 - -最初に起動したとき、バックグラウンド処理でバックアップが作成されます。その後は、最後にバックアップが作成されてから5時間以上過ぎていれば、新しいバックアップが作成されます。最初、AnkiDroidでは最新の8つのバックアップが保存されるようになっています。この数は設定で変更できます。 - -デッキリスト画面で、メニューから「バックアップから復元」を選ぶと、バックアップからデータを復元することができます。 - -[[settings]] -== 設定 - -ドロワーメニューを開いて「設定」を選ぶことで、設定画面に行けます。ここで各種動作設定や、表示や外観の設定ができます。 - -設定画面は、以下で説明するようにいくつかのセクションに分かれています。 - -=== AnkiDroid - -このセクションでは、アプリ全体の動作に影響する設定を行います。 - -コレクションの保存先 :: AnkiDroidのデータが保存されるフォルダを変更します。 - -AnkiWebアカウント :: クラウド同期で使うアカウントを変更します。同期に関する詳しい情報は、 <> を参照してください。 - -メディアの同期 :: 初期状態では、AnkiDroidはカードや学習履歴に加えて音声や画像も同期します。このオプションをオフにすると、音声や画像などは同期されなくなります。 - -自動同期 :: このアプリを起動する時・終了する時に自動的に同期したい場合は、この機能を有効にしてください。過去10分以内に同期が行われていない場合に、同期が行われます。同期が開始されてからキャンセルするには、デバイスのバックボタンをタップしてください。ただし、キャンセルが完了するまでやや時間がかかることがあります。 - -同期のタイミングについて、よりきめ細かく設定したい場合は、例えば Tasker のような、自動同期のためのサードパーティーアプリを使うとよいかもしれません。詳細は、 https://github.com/ankidroid/Anki-Android/wiki/AnkiDroid-API#sync-intent[API documentation] を参照してください。 - -新規カードの追加先 :: 初期値の「選択中のデッキ」になっている場合、それぞれのデッキの最後に使われたノートタイプが記憶され、次にデッキを選択したときにも同じタイプが使われます(さらに、どこで「追加」操作をした場合でも、追加画面では現在開いているデッキが選択された状態になります)。もう一方の「ノートタイプから選択」の場合は、逆にそれぞれのノートタイプについて最後に使われたデッキが記憶され(、「追加」するときには最後に使われたノートタイプで追加画面を開き)ます。後者は、それぞれのデッキで個別のノートタイプを使っている場合に便利です。 - -言語 :: アプリで使う言語を変更します。なお、AnkiDroidの翻訳はボランティアによって行なわれています。もし訳の欠けや間違いにお気付きのときは、翻訳プロジェクトにご連絡お願いします。詳しくは https://github.com/ankidroid/Anki-Android/wiki/Contributing#translate-ankidroid[AnkiDroid Wiki] をご覧ください。 - -エラーの報告 :: AnkiDroidがクラッシュし、エラー報告システムが報告を送ろうとしたときに確認を求めるかどうかを設定します。もしお望みなら、エラー報告システムを完全に無効にすることもできます。 - -==== 通知 - -このサブセクションでは、AnkiDroridが通知バーに表示する通知について設定できます。 - -通知のタイミング :: 「通知しない」を選ぶと、AnkiDroidからの通知を一切行いません。「待受状態(AnkiDroidを表示していない間に進行していたデータ処理(例: 同期、バックアップ)が完了し、ユーザーが操作を再開できる状態)」は、同期の完了時など、状態の重要な変化を通知します。「待受状態の時と、 課題のカードが*枚を超えている時」は、待受状態の時と、課題のカードが一定数を超えた時に通知します(ウィジェットを有効にする必要があります)。 - -振動で通知 :: チェックを入れると、通知が出たときに端末が振動します。 - -ライト点滅で通知 :: チェックを入れると、未読の通知があるときにライトが点滅します(端末に通知LEDがあれば)。 - -=== カードの復習と評価 - -このセクションでは、カード学習画面での動作を設定できます。なお、ここでは、**すべてのデッキ**に影響する設定だけが扱われることにご注意ください。学習画面での動作には、**デッキごとに**設定できるオプションもあり、**デッキ概要画面のデッキオプション**から設定することができます。 - -新規カードの追加場所 :: 学習時に、新規カードがいつ表示されるかを設定します。復習カードと混ぜるか、復習カードの後にまとめるか、復習カードの前かです。 - -日付更新の時刻 :: 次の日に学習することになっているカードが、何時から表示されるようになるかを設定します。既定値は「4時」になっていますが、これはたとえば、夜中0時近くに勉強していても、一度の学習で二日分のカードが表示されるのを避けることができます。もっと遅く寝る人や早く起きる習慣の人は、いつも寝る時間の少し後ぐらいに設定しておけばよいでしょう。 - -先取り学習の限度(分) :: ここで設定した時間は、選択中のデッキに、その日に学習すべきカードが残っていない場合の動作に影響します。既定値の「20分」の場合、他に学習すべきものがない場合に限り、学習予定まで20分以内のカードも先取りして表示するようになります。もしここの値を0に設定した場合、必ずそれぞれのカードの学習予定時刻まで待つようになり、学習するカードが出てくるまで「おめでとう」画面を表示し続けます。 - -タイムボックス時間制限 :: 「タイムボックス」とは、比較的長めの学習(例えば30分間)をより短い時間に分割して考えることで、集中を助ける方法です。タイムボックス時間制限をゼロ以外の数に設定すると、AnkiDroidは定期的にメッセージを出し、設定された時間内に何枚のカードを学習したかを表示するようになります。 - -==== 画面表示 - -このサブセクションには、学習中の表示方法に関する設定があります。 - -画面を保持 :: Androidシステムのスリープ設定を無視して、画面をオンのままにします。 - -フルスクリーン モード :: 画面をより広く使うことができるように、Immersive(没入)フルスクリーンモードに切り替えることができます。「ステータスバー(通知バー)を隠す」では、Androidシステムのステータスバー(通知バー)、アクションバー、底部のナビゲーションボタンを隠します。もう一方の、「ステータスバー(通知バー)と解答表示ボタン・回答ボタンを隠す」では、カードの内容それ自体だけを表示し、以外の全てを隠します。ステータスバーが隠れている部分を画面内側(下方向または上方向)にスワイプすると、フルスクリーンモードが一時的に解除されます。 - -注:Immersive フルスクリーンモードはAndroid4.4以上のバージョンでのみサポートされています。 - -中央揃え :: AnkiDroidは、基本的にはAnkiと同じようにカードを表示しようとします。しかし、もしAnkiDroidでは縦方向に中央揃えになっているというほうが良ければ、この機能を使ってください。 - -ボタン上に時間を表示 :: 初期状態では、学習中の評価ボタンには、それぞれのボタンを選んだときに同じカードが次にいつ学習に入るか表示されています。このチェックをオフにすると、時間は表示されなくなり、「もう一度」「難」「普通」「簡単」という自己評価用の基準だけが表示されるようになります。 - -カードの拡大・縮小 :: カードの内容(画像以外)の表示を拡大・縮小することができます。全てのカードのフォントサイズを一律に拡大・縮小したい場合にこの機能を使ってください。 - -画像の拡大・縮小 :: 全てのカードに埋め込まれた画像を一律に拡大・縮小することができます。 - -解答ボタンのサイズ :: 「解答を表示」などのボタンが小さすぎて押しにくい場合、ここの値を大きく設定してください。 - -残りのカード枚数を表示 :: ここをオフにすると、画面左上のカードの枚数が表示されなくなります。 - -==== ホワイトボード機能 - -このサブセクションでは、学習中のホワイトボードの設定をします。なお、ホワイトボードはデッキごと個別に、学習画面のメニューから有効化する必要があります。 - -線の太さ :: ホワイトボードで描くときの線の太さを設定します。細くしたほうが、細かい部分が書きやすくなるかもしれません。 - -黒色の線 :: 色のついた線ではなく、黒の線を描くようになります。多少メモリの節約になる場合があります。なお、ナイトモードを使用中は、この設定は無視されます。 - -==== 解答自動表示 - -解答自動表示機能を使うと、一定時間後に解答を自動的に表示することができます。さらに、次の質問を自動で表示することもできます。この場合、答を思い出せなかったものとして扱われます(すなわち、「もう一度」ボタンを押したのと同じことになります)。 - -答が自動で表示されるまでの時間と、次の質問が自動で表示されるまでの時間が設定できます。 - -=== フォント - -ここでは、AnkiDroidで使うフォントが変更でき、また各種表示倍率も設定できます。独自のフォントを使う方法については、詳しくは <> を参照してください。 - -標準フォント :: AnkiDroidの学習画面で使われるフォントを選択できます。"fonts"フォルダにフォントファイルをコピーしておくことで、ここで表示される選択肢に追加できます。 - -標準フォントの適用範囲 :: 何も設定していない場合、「標準フォント」で設定したフォントは、Ankiでカードのスタイルに特定のフォントを指定していない場合にだけ使われます。しかし、カードのスタイル指定を無視して、標準フォントを強制的に使うように設定することも可能です。 - -ブラウザとノート編集のフォント :: ブラウザと「ノートを編集」の画面で使われるフォントを指定します。 - -ブラウザ用フォントサイズ調整 :: ブラウザでの表示フォントサイズを変更できます。 - -[[gestures]] -=== ジェスチャー - -AnkiDroidでは、操作法をカスタマイズして、よく使う操作はタップ・スワイプといったジェスチャーですばやく呼び出せるようにすることができます。 - -==== アクション - -以下のようなジェスチャーに機能を割りあてることができます。 - - * 上にスワイプ - * 下にスワイプ - * 左にスワイプ - * 右にスワイプ - * ダブルタップ - * 上をタップ - * 下をタップ - * 左をタップ - * 右をタップ - -それぞれのジェスチャーには、以下のような動作が割りあてられます。 - -何もしない :: 何もしません。そのジェスチャーを無効にするときに使います。 - -答えの表示 :: 問題が表示されているときに、答を表示します。 - -回答ボタン1 :: 答が表示されているときに、赤字のボタンを押して「すぐ復習する」と評価する動作です。問題が表示されている場合にこの操作をすると、単に答が表示されます(下記の、他の回答アクションでも同様です)。 - -回答ボタン2 :: 答が表示されているときに、左からふたつ目のボタンを押して「思い出すのが難しかった」と評価する動作です。 - -回答ボタン3 :: 答が表示されているときに、左から三つ目のボタンを押す動作です。 - -回答ボタン4 :: 答が表示されているときに、左から四つ目のボタンを押す動作です(四つ目がある場合)。 - -推奨する答え(緑色) :: 答が表示されているときに、緑字のボタンを押す動作です。 - -推奨された答えよりも良い答え :: 答が表示されているときに、緑字のボタンの右側のボタンを押し、「とても簡単だから復習間隔はもっと長くていい」と評価する動作です。 - -戻す :: 最後に行った操作を元に戻します。 - -カードを編集する :: 現在のカードを編集します。 - -マークをつける :: 後で探しやすいように、現在のノートに「marked」(マーク付き)のタグをつけます。 - -検索式 :: 拡張機能設定で辞書検索機能が有効にされている場合、辞書で検索を行います。なお、この機能を使う前に、検索内容をクリップボードにコピーしておく必要があります。 - -カードを延期 :: 現在のカードの学習を一旦延期します。デッキリストに戻ると、そのカードはもう一度学習予定に入ります。 - -カードを保留 :: カードに保留タグをつけ、ブラウザでタグをはずすまでは学習中に出てこないようにします。 - -ノートを削除 :: 現在のノートと、そのノートに属するカード全てを削除します。裏→表のカードも自動生成されるデッキを使っているのでなければ、おそらく削除されるカードは一枚でしょう。 - -メディアを再生 :: カードに添付されている音声を再生します。 - -学習を中断 :: 学習を中断し、デッキ概要画面に戻ります。 - -ノートを延期 :: 表示中のカードと関連カード(同じノートから作られたカード)の学習中の表示を延期します。つまり、翌日まで学習中に表示されなくなります。 - -ノートを保留 :: 表示中のカードと関連カード(同じノートから作られたカード)が学習中に表示されないようにします。つまり、あなたが保留を解除するまで、学習中に表示されなくなります。 - -=== 拡張機能 -慣れた利用者向けの、頻繁には使わないような機能についての設定です。 - -コレクションの保存先 :: AnkiDroidのデータが保存される場所を変更します。(お勧めしません。) - -完全同期を強制する :: 次回の同期で、強制的にすべてのデータをアップロード、あるいはダウンロードしたい場合、ここをタップしてください(例えば、片方の側でうっかり間違ってデッキを削除してしまい、この削除操作を同期するのではなく、もう一方の側に残ったデータから元に戻したい場合など)。 - -保管するバックアップの世代数 :: バックアップをいくつ保存しておくかを設定します。 - -==== 回避策 -カード内にキーボード入力で解答する :: -解答をキーボード入力で行うよう設定(詳しくは、 http://wikiwiki.jp/rage2050/?2.0%2FCardsAndTemplates#checking-your-answer[Ankiのマニュアルのこの項]を参照してください)しているカード内に、テキスト入力ボックスを表示します。 - -ホワイトボード機能やジェスチャー機能を使っている時のユーザーエクスペリエンスを向上させるために、AnkiDroidではテキスト入力ボックスとカードを別々に表示していますが、これはAnki上での表示方法とは異なります。 - -Anki上での表示方法と一致させたい場合はこのオプションを有効にしてください。画面の領域を無駄なく使えますし、テキスト入力ボックスで適切なフォントを選ぶこともできます。 - -回避方法を入力(※) :: 一部の古い端末で、テキスト入力欄にフォーカスがあたらなくなる問題を修正します(※Android 4.0.3以降では表示されません)。 - -長押しの回避策(※) :: 一部の古い端末で、テキスト選択やコピーをするときに長押しが効かなくなる問題を修正します(※Android 3.0以降では表示されません)。 - -ヘブライ語母音への対応(※) :: 一部の古い端末ではヘブライ語が正しく表示できないので、ヘブライ語フォントをダウンロードし、それを使って表示します。(※API 15以降では表示されません) - -音声合成 :: カードに書かれている文章をAndroidの音声合成機能を使って発音させる場合、このオプションをオンにしてください。プリインストールされているGoogleの音声合成エンジンで動作するはずです。その他の製作者による音声合成エンジンは、動くものと動かないものがあると思われます。それぞれのデッキの学習を初めて行うときに、AnkiDroidがそのデッキのカードは表と裏がそれぞれ何語で書いてあるか聞いてきます。この言語設定を変更する、あるいは特定のデッキで音声合成をやめるという場合は、この下にある「言語設定のリセット」オプションを使い、デッキの言語設定をしなおす必要があります。 - - この機能は、将来的に廃止され、別個にダウンロードできるプラグインに変わる可能性があります。 - -検索辞書 :: 学習中、クリップボードにコピーした単語を調べるための辞書を設定します。辞書の設定がすんだら、次のようにすると辞書を使った検索ができます。 - - . 学習画面で、コピーしたい部分のあたりを長押し - . コピーしたい部分を選択し、アクションバーの「コピー」をタップ - . カードのどこかを一回タップ - . 虫めがねのアイコンが右上に表示されるので、それを押すと検索実行 - -あるいは、この検索操作をジェスチャーに設定しておくこともできます。 - - この機能は、将来的に廃止され、別個にダウンロードできるプラグインに変わる予定です。 - -言語設定のリセット :: 音声合成の言語設定をリセットするために使います。 - -eReader :: eReaderのハードウェアボタンによる操作をサポートします( https://github.com/ankidroid/Anki-Android/issues/1625[issue 1625] を参照してください。)。 - - この機能は、将来的に廃止され、別個にダウンロードできるプラグインに変わる予定です。 - -ダブル スクロール :: eReaderのハードウェアボタンでのスクロール量を二倍にします。 - - -== 高度な機能 - -[[reverseCards]] -=== 反転カード - -Ankiシステムには、 http://wikiwiki.jp/rage2050/?2.0%2FTheBasics#note-types[表→裏だけではなく裏→表の学習にも対応したノートタイプ] が、あらかじめ用意されています。AnkiDroidで <> ときには、「Basic (and reversed card)」のような、この種のノートタイプのうちどれかを選択すれば、逆向きの学習用のカードも同時に生成されます。 - -++++++++++ - -++++++++++ - -もしカードを追加するときに間違ったノートタイプを選んでしまっていても、<>でノートタイプを変更することができます。また、Ankiのブラウザを使うと、複数のカードのノートタイプを一度に変更することができます。まず <> の説明に従って、デッキをPCに移してください。次にAnkiでブラウザを開いて、必要なカードをすべて選択し、メニューから「編集」→「ノートタイプを変更...」を選んでください。 - -使用中のカードがカスタムノートタイプを使っていて、それに反転カードが入っていない場合は、反転カードを含むようノートタイプを編集することもできます。 http://wikiwiki.jp/rage2050/?2.0%2FCardsAndTemplates#reverse-cards[Ankiのマニュアルの「反転カード」の節] の説明に従って作業を進めてください。Ankiを使うよりも手間がかかりますが、AnkiDroidでもノートタイプを編集することができます。詳細は、<> の項を参照してください。 - -[[customFonts]] -=== カスタムフォント - -AnkiDroidでは、カードを表示するにあたり、Androidシステムに塔載されているものとは別のフォントを利用することができます。適切に設定するためには、Ankiを使うことを強くおすすめします。詳しくは http://wikiwiki.jp/rage2050/?2.0%2FCardsAndTemplates#installing-fonts[Ankiのマニュアルの当該の節] を参照してください。 - -あるいは、AnkiDroidフォルダ(設定 → AnkiDroid → コレクションの保存先)の中に"fonts"という名前のフォルダを作成し、そこへttfフォントファイルをコピーして、設定 → フォント → 標準フォント でコピーしたフォントをデフォルトに設定することもできます。ただし、この方法は、Ankiを使った方法よりも不安定であり、複数の端末で学習する場合には不整合が起きるかもしれません。ご注意ください。 - -AnkiとAnkiDroidでは、ttf形式のフォントだけが公式に使えることになっています。 https://www.google.com/get/noto/#/[Google Noto] フォントはすべての言語についておすすめできますし、 https://github.com/ankidroid/Anki-Android/wiki/Freely-distributable-fonts[こちら] でフリーのフォントを探すこともできます。 - -AnkiDroidでは、外部のフォントを使うときはその全体をメモリに読みこんでいます。アジア圏の言語のフォントはかなりサイズが大きいことに注意してください。古い端末でAnkiDroidを使っていて、フォントをインストールしてからAnkiDroidが頻繁にクラッシュするようになった場合、端末のメモリが不足しているのかもしれません。(訳注:日本で現在普通に使われている端末では、あまり心配しなくてもよいと思います) - -*注意その1:* 設定で「メディアの同期」をオフにしている場合、PCからAnkiDroidのcollection.mediaフォルダにフォントファイルを手動でコピーする必要があるかもしれません。 - -*注意その2:* この説明やAnkiのマニュアルの通りにしてもフォントが正常に機能しない場合、 FAQの https://github.com/ankidroid/Anki-Android/wiki/FAQ#i-followed-the-instructions-in-the-manual-but-i-still-cant-get-my-custom-font-to-work[フォントに関する問題を解決するための詳細なステップ]を参照してください。 - -*注意その3:* カスタムフォントの機能は、Android 2.1では通常動作しません。これはAndroidシステムの制限であり、AnkiDroidにはどうしようもない問題です。 - -[[customizingCardLayout]] -=== カードレイアウトのカスタマイズ - -カードのレイアウトは完全に自由に設定することが可能ですが、その方法を習得するのはそう簡単ではありません。また、おそらくそういったカスタマイズは、 <> を使って行うほうがずっと楽でしょう。 - -http://wikiwiki.jp/rage2050/?2.0%2FCardsAndTemplates[Ankiのマニュアルの「カードとテンプレート」の節] には、具体的にどのようにカスタイマイズを行うか説明があります。そこに記載された操作のほとんどはAnkiDroidでも「ノートの編集」画面の一番下の「カード:~」をタップするか、デッキリスト画面の「その他」ボタンから「ノートタイプの管理」をタップして行うことができます。カードレイアウトのカスタマイズについての詳細な情報はAnkiのマニュアルに記載されていますので、ここでは割愛します。 - -AnkiDroidのWiki内の https://github.com/ankidroid/Anki-Android/wiki/Advanced-formatting[advanced formatting page] には、カードのフォーマットを最大限活用するための様々なヒントが書かれているので、読んでみることをお勧めします。また、あなたがAnkiDroidコミュニティーで共有したい便利な方法があれば、自由に書き込んでください。 - -[[typeInAnswer]] -=== 解答を入力する - -AnkiDroidでは、答を(頭で想起するだけではなく)入力し、正解と比較するという使いかたもできます。このためには、 http://wikiwiki.jp/rage2050/?2.0%2FCardsAndTemplates#checking-your-answer[Ankiのマニュアル] の記述に従って、PC上で設定しておく必要があります。 - -Ankiは、カード表面の `{{type:フィールド名}}` (例: `{{type:Back}}` ) というフィールドは入力欄として表示します。AnkiDroidでは、このフィールドは“......”と表示され、画面下に文字入力欄を表示します。解答面を表示するときには、Ankiと同様に、 `{{type:フィールド名}` フィールドの部分には入力されたテキストと正解のテキストの比較が表示されます。 - -テキスト入力欄とソフトウェアキーボードは、設定で「タイピング無効化」を設定している場合には表示されません。 - -「タイピング無効化」が設定されている場合でも、解答面を表示するときに正しい答は表示されます。そうしないと正解が全く表示されなくなってしまうからです。 - -比較表示を隠す(いずれにせよ正解は表示されますので)ためには、`typeans` というHTML ID属性を使うこともできます。Ankiを使い、 http://wikiwiki.jp/rage2050/?2.0%2FCardsAndTemplates[カードのスタイル] に `.mobile #typeans {display: none;}` を追加してください。 - -解答入力欄とプロンプト(“......”)、比較表示には、ほかにも表示形式を変えるのに使うことがあるクラスがあります。一部はAnkiと共通ですが、AnkiDroid特有のものも存在します。 - -比較表示には、`typeGood`、`typeBad`、`typeMissing` の三つのクラスがあり、それぞれ比較表示に緑、赤、灰色の背景をつけるために使われています。この三つのクラスは、Ankiでも同様に使われています。 - -プロンプト(“......”)には、 `typePrompt` というクラスが設定されています。 - -設定で解答の入力機能が無効にされているときは、 `typeOff` クラスが問題面のプロンプトと、解答面の比較表示を含むdiv要素に設定されています。このクラスは、プロンプトを表示したり比較表示を隠したりするのに使うことができます。 - -[[betaTesting]] -=== ベータテスト - -AnkiDroidの最新の機能を試してみたいと思ったら、次のようにしてベータテストに参加できます。 - - . https://play.google.com/apps/testing/com.ichi2.anki[Google Playのベータページ] にアクセスする - . 「Become a beta tester」をクリックする - -ベータテストに参加すると、通常のアップデートと同じように、最新のベータ版が自動的にGoogle Playからインストールされるようになります。さらに勇敢な方は、上記の手順でベータテストに参加することに加えて、 https://groups.google.com/forum/#!forum/ankidroidalphatesters[アルファテスターグループ] に参加することも可能です。 - -ベータ版・アルファ版でバグを発見された場合は、ぜひ、 link:help-ja.html[ヘルプ]の説明に従って、AnkiDroidの問題管理システムにご報告ください。 - -ベータテストに参加したとしても、いつでも参加を終了することができます。 https://play.google.com/apps/testing/com.ichi2.anki[Google Playのベータページ] にアクセスし、「Leave the test」をクリックするだけでOKです。 - -[[contributing]] -== AnkiDroidの開発に貢献する - -AnkiDroidはオープンソースプロジェクトであり、開発は有志のユーザーの貢献によるものです。AnkiDroidプロジェクトに貢献する方法をいくつか紹介します。 - -ユーザーとして :: アプリを評価したり、 https://groups.google.com/forum/#!forum/anki-android[AnkiDroidフォーラム] に参加したり、他のユーザーの質問に答えたり、バグ報告をしたり、 <> になったり、といった貢献方法があります。アプリ開発者ではなくユーザーとして貢献する方法についての詳細な情報については、 https://github.com/ankidroid/Anki-Android/wiki/Contributing[Wiki] を参照してください。 - -翻訳 :: AnkiDroidのインターフェースやマニュアルの翻訳はすべてユーザーによって行なわれており、開発チームは大変感謝しています。翻訳作業に協力する方法については、Wikiの https://github.com/ankidroid/Anki-Android/wiki/Contributing#translate-ankidroid[translating] のページを参照してください。 - -開発 :: AnkiDroidのソースコードは https://github.com/ankidroid/Anki-Android[GitHubのページ] で公開されており、新機能の開発やバグ修正は大歓迎です。なお、新機能についてあれこれ長い時間を費す前には、まずフォーラムで、その機能はAnkiDroidで採用できそうか質問してみたほうがよいかもしれません。新しい機能ならなんでも採用するというわけではないからです。もしAndroidプログラミングを始めたばかりであれば、ちょっとしたヒントや、初心者向けのタスクについてフォーラムで質問してみてください。 diff --git a/manual-zh-CN.asc b/manual-zh-CN.asc deleted file mode 100644 index 1d60300..0000000 --- a/manual-zh-CN.asc +++ /dev/null @@ -1,795 +0,0 @@ -:docinfo1: -:toc: - -= AnkiDroid 2.14 User Manual -:sectanchors: - -== 介绍 - -感谢你使用AnkiDroid, -这是流行的http://ankisrs.net/[Anki]间隔复习软件的android客户端. - -AnkiDroid通常和你桌面版的Anki结合起来使用. 当然,没有桌面版的它可以单独使用, -一些任务仅仅是可能实现,但是用桌面版的Anki实现起来效率会更高. 另外, 强烈建议,在理解这里谈到的术语之前至少要阅读Anki手册的 http://ankisrs.net/docs/manual.html#the-basics["基础"]部分. - -如果手册中没有包含你寻找的内容, 请查阅 https://github.com/ankidroid/Anki-Android/wiki[AnkiDroid维基百科] , 它将提供一个变更列表,内容包含提交的bug报告,功能要求,以及常见问题解答等等. - -[[开始使用]] -== 开始使用 -要开始使用AnkiDroid, 我们需要添加一些卡片去学习. 在主屏幕中, 点击右下角的“+”号按钮,系统将允许你添加一个新的笔记,或是下载共享牌组,或是创建一个新的牌组. - -请观看5分钟的 https://www.youtube.com/watch?v=F2K1gOSdIZA[教程视频], 它将告诉你如何在AnkiDroid中添加,下载,以及学习卡片. 更多细节你可以从下面内容获取. - -如果你已经是Anki桌面版的用户,想从电脑中把牌组导入AnkiDroid , -你可以直接跳到 <> 这部分. - -[[牌组选择]] -== 牌组列表 -*_注意:_* 本节开始假设你已经明白什么是 http://ankisrs.net/docs/manual.html#the-basics[牌组和卡片] - -打开AnkiDroid你看到的第一个屏幕就是牌组列表. -它包含你所有卡片的所有牌组,并允许你在此对看到的牌组进行多种操作: - -++++++++++ - -++++++++++ - -=== 添加按钮 -右下角的加号按钮用来向AnkiDroid中添加新的学习材料,点击它将展开有三个选项的菜单,在link:https://www.youtube.com/watch?v=F2K1gOSdIZA[视频教程]对此有详细描述。 - -添加 :: 如果你想通过AnkiDroid来创建自己的卡片(笔记)请点击这个选项,“卡片”和“笔记”在Anki中有特别的含义,他们在link:http://ankisrs.net/docs/manual.html#the-basics[Anki手册]中有详细解释,请观看添加笔记和卡片的视频教程,了解详细信息请参阅下面<>部分. - -获取共享牌组 :: 从互联网上下载其他用户贡献的牌组 - . 确保你能连接上Inernet网. - . 点击 + 然后 *获取贡献牌组*. AnkiWeb网页将打开. - . 在搜索栏敲入你需要的类别. - . 在你你喜欢的牌组哪一行的后面,点击*Info*. - . 滚动到页面下方,然后点击*Download*. - . 你的浏览器将开始下载这个文件,下载完成,浏览器将给你“下载完成”的提示信息. - 点击提示信息. - . AnkiDroid将出现,并且显示确认对话框,点击“添加”按钮. - . 导入完成之后,这个牌组就准备好可以开始学习. - -创建牌组 :: 创建一个新的空的牌组 - . 点击 + 按钮,并选择“创建牌组” - . 为新牌组选择一个名字,例如叫“新日语” - . 依照上面的添加说明开始添加卡片 - -=== 活动栏 -每个AnkiDroid屏幕的上面都有一个活动栏,它上面设置有很多按钮,用来执行各种不同的操作。 -在牌组列表屏幕上的活动栏有以下功能: - -导航菜单按钮 :: 点击最左侧的图标将显示导航菜单<> 它将使你可快速在app的主要窗口间切换. - -同步按钮Sync button :: 右侧的循环箭头按钮用于将你的卡片与云端同步,具体参看 -<> 这个部分的描述. - -下拉菜单按钮 :: 最右侧是个下拉菜单按钮,它包含了一些不不常用的操作,这些操作在随后的部分将会具体描述. - -**Hint:** 长按导航栏上的任意一个按钮,应用将弹出一个小文本框,告诉用户这个按钮的用途! - - -=== 学习一个牌组Studying a Deck -要学习一个牌组内的卡片,轻轻点击牌组的名字(如果你用的是10英寸的平板电脑,点击“学习”),AnkiDroid将切换到学习模式. - -注意,当前选中的牌组将以灰色背景显示为高亮模式;如果你有过滤的牌组<> 这些牌组的字体将显示成蓝色。至于过滤牌组,Anki手册中有详细描述。 - -=== 其他的牌组操作 -长按一个牌组,将显示一个操作列表,用来操作当前牌组,所列的操作有: - -重命名牌组 :: 点击这个选项,可对当前牌组重新命名; - -牌组选项 :: 点击牌组选项,你可以对当前牌组的学习选项进行配置; -了解更多学习选项配置,可参阅Anki手册中的学习选项 http://ankisrs.net/docs/manual.html#deckoptions[desktop documentation] 学习选项。 - -自定义学习 :: 允许你在完成当天的学习计划任务后选择一个预设的选项来增加学习任务,例如增加增加每天的学习上限,了解更多相关信息请参阅 <> 这个部分. - -删除牌组 :: 使用这个选项可删除当前牌组(注意:这个操作是不可逆转的,尽管有一个恢复的选项, although you can <>) - -导出牌组 :: 这个选项可用与其他用户分享牌组,了解更多信息请参阅 <> 这个部分. - -取消搁置 :: 这个选项只有当前的牌组包含有已经被手动或自动搁置的卡片时才会显示出来。 - -重新创建 / 清空 :: 如果你选择的是一个过滤牌组<> 那么你将有有这个选项去重新创建或是清空当前牌组. - - -==== 在牌组上可点击的区域 -列表上的每一个牌组都有三个可以点击的区域: - -展开子牌组 :: 如果你正在使用 link: -http://ankisrs.net/docs/manual.html#decks[子牌组], 子牌组的展开键会显示在这个牌子的左侧,它可以用来显示和隐藏子牌组。一个 ▶ 图标意味着当前牌组有隐藏的子牌组,而这样的 ▼ 图标意味着当前牌组已经显示它有的子牌组,如果没有图片,则意味着当前牌组没有子牌组,注意:子牌组可以通过命名方式来创建,例如:“父牌组::子牌组”。 - -牌组名称 :: 这是个常用点击区域,如果当前牌组有学习任务,点击它,将带你进入复习卡片的屏幕。 - -计数区域 :: 在每个牌组组右侧,有个计数区域,点击它,系统将带你进入牌组总览屏幕,在这里你将可以快速了解到当前牌组总共的牌组数量以及正待复习和学习中,以及新卡片的数量。 - -=== 高级操作 -对于一些不常见的任务,在下拉菜单中有一些附带操作,简单介绍如下: - -撤销 :: 在学习状态下刚刚复习过某个卡片后,你可在此通过点击当前按钮取消复习那张卡片的行为,使那张卡片再次返回之前复习状态。 - -检查数据库 :: 点击它能够自动修复很多数据库的问题,它也可以清除掉任何没用过的tag标签,如果你的牌组遇到了很多问题,你首选操作应该是试试它。 - -检查媒体 :: 如果你遇到有关媒体同步的问题,可以试着点击这个按钮。 - -空卡片 :: 从你的牌组集合中移除所有的空卡片,更多信息请参阅link: http://ankisrs.net/docs/manual.html#card-generation-&-deletion[桌面帮助文档] 。 - -恢复备份 :: 允许你从AnkiDroid的备份中恢复 <> - -管理笔记类型 :: 允许你添加、编辑或删除笔记类型,更多详情请参阅 <> 部分。 - -导入 :: 导入.apkg记忆库文件,更多详情请参阅 <>部分。 - -导出牌组集合 :: 导出所有牌组,并生成collection.apkg文件。更多信息请参阅<>部分。 - -=== 牌组计数Deck Counts -紧跟着每个牌组的后面,有三个数组显示,左边的蓝色数字代表今天 -你还有多少张心卡片要学习,anki默认每天给你安排20个新卡片的学习任务, -如果你喜欢,你可以自定义这个数字。中间红色的数组代表着今天正处在学习状态的卡片有几张, -最右边绿色的数字代表截至到今天逾期的、需要复习的卡片有几张。 -(例如一些卡片,已经从学习阶段毕业). 如果一个牌组On a deck -之前你从来没有学习过,那么学习中的和复习的数字将对应为0。 - -就像上面解释的那样,在这些数字上点击,系统将带你进入牌组概览页面. - - -[[抽屉]] -== 导航抽屉 -++++++++++ - -++++++++++ - -在应用的大多页面,只要轻轻点击左上角的菜单图标,系统将打开导航抽屉, -或者你从屏幕的左侧向内轻轻活动,也可以打开导航抽屉. 它将用于 -快速在应用的不同页面间切换,通过它你可以切换到下面的页面: - -牌组列表 :: 带你进入应用的顶级页面,这里陈列着所有的牌组(<>) -卡片浏览器 :: 显示一个所有的卡片列表 (<>) -统计 :: 帮助你追踪你学习进度 (http://ankisrs.net/docs/manual.html#statistics[more info in Anki manual] and <>) -夜间模式 :: 这个按钮将切换你的应用到暗色样式,很多用户发现这种样式可减轻眼睛疲劳,通常在光线暗的地方复习卡片时候用到。参阅维基 https://github.com/ankidroid/Anki-Android/wiki/Advanced-formatting#customize-night-mode-colors[wiki] 这里有关于在夜间模式下如何优化卡片背景和字体颜色的说明。 -设置 :: 允许你设置各种选项来优化你的应用,使其更适合你的使用习惯 (<>) -帮助 :: 打开当前这个网页 -提交反馈 :: 从AnkiDroid团队获取支持 - -[[牌组概览]] -== 牌组概览屏幕 -++++++++++ - -++++++++++ -在牌组列表屏幕,点击数字区域,你将被带到牌组概览页面,在平板电脑上,它总是显示在牌组列表的右侧。 - -在这个屏幕上,你能够看到当前这个牌组的摘要信息,创建自定义学习选型,重建或清空过滤的牌组,改变记忆库选项。当这个屏幕可见的时候点击学习按钮,系统将带你进入这个牌组的学习页面。 - -=== 活动栏 -活动栏上显示的图标将依赖于你当前打开的是普通牌组还是过滤牌组。 - -==== 普通牌组 - -自定义学习 :: 点击扳手图标将带你创建自定义会话,例如在正常学习安排之外增加额外的复习任务,或者当前牌组中某些卡片,要了解更多相关信息请参阅 <> 部分。 - -==== 过滤牌组 - -清空牌组 :: 点击叉号图标将清空当前过滤牌组中的所有卡片(例如:返回到他们原来的牌组中). - -重建牌组 :: 点击重新创建图表,系统将根据过滤牌组选项中的设置重新创建生成过滤牌组。 - -==== 概览菜单 - -牌组选项 :: 允许你配置一些与当前牌组相关的选项, -例如每天学习的新卡片和复习的卡片数量。 -了解更多关于学习选项的信息请参看 http://ankisrs.net/docs/manual.html#deckoptions[desktop documentation] 部分。 - -取消搁置 :: 这个选项只有当选择的牌组包含有被手动搁置或是自动搁置的卡片时候才会显示。 - -[[复习]] -== 学习屏幕 -在牌组列表屏幕,点击牌组名称,或是在牌组概览屏幕点击学习按钮,系统将带你进入学习页面,在哪里你可以开始你的学习。 -++++++++++ - -++++++++++ - -=== 基本概念 -如果你之前没有用过桌面版的Anki,你最好先看一下 - http://ankisrs.net/docs/manual.html#_intro_videos[intro video] -这里的视频介绍, 它解释了基本的复习过程。 - -在屏幕的左上角,你将看到三个数字,On the top left of the screen you'll see three numbers. From the left, these -他们分别代表剩余的新卡片数量,学习中的卡片数量,以及等待复习的卡片数量。这些术语 -在桌面版的程序的视频介绍中有更详细的解释, -如果你还没看到,请现在打开please http://ankisrs.net/docs/manual.html#_intro_videos[check them out] -这个视频。 - -当你已经看到卡片的问题,并且已经回想到它的答案,或是 -你不知道答案, 点击*显示答案* 按钮。 点击之后i,底部区域将变成2-4个备选按钮, -根据你之前对这张卡片做出的相应,这些按钮将显示下次卡片出现的时间 -其中10m 代表 "10 分钟" and "5d" 代表5天, -你可以直接点击其中的一个按钮,确定下次卡片出现的时间。 - -为了使复习更快捷,你可以为回答卡片配置手势(例如点击屏幕或滑动屏幕),这样你就可以不用再点击按钮了。 -关于更多配置手势的信息请参阅 <> 部分。 - -=== 活动栏 -在学习屏幕的活动栏上有几个按钮,他们可执行多种常见操作,这些显示出来的按钮的数量是取决于 -你的屏幕尺寸,以及屏幕分辨率。如果你的屏幕有足够的宽度,它将显示所有的按钮。 -如果你的屏幕不能显示完这些按钮,其余的按钮将可通过点击最右侧的菜单按钮展示出来。如果你不能确定某个按钮的用途 -你可以长安这个按钮,系统将弹出一个标签告诉你这个按钮的名字,接下来向你展示这些可用的按钮: - -取消 :: 取消上一张卡片你选择的答案(这个按钮总会显示)。 -标记卡片 :: 为当前卡片的笔记添加上一个"marked"标签,这样方便你在卡片浏览器中很容易找到它。 -当你想随后对当前笔记做一些操作的话,这个标记会很有用,例如回家后查询一个单词。进行标记的卡片会在卡片的左上角显示一个星图标。 -编辑卡片 :: 打开笔记编辑屏幕,在这里你可以改变现实在卡片上的内容(了解更多相关信息请参阅 <> 部分) -隐藏 / 删除 :: 这里你可以选择搁置,暂停当前卡片或是笔记。 - -- **搁置卡片 / 搁置笔记: ** 隐藏一张卡片或是与它的笔记相关的所有卡片直到下一天才出现。 (如果你向取消搁置,你可以在牌组列表页面 <>长按牌组名称选择弹出的对话框, 或者在牌组概览页面 <>进行设置.) 如果有时候你不想回答这些卡片,或是你想在其他时间再去学习这些卡片的时候,这个选项会显得很有用。如果一些卡片来自于同一个笔记的时候搁置也会自动执行 。如果卡片在被搁置的时候正处于学习中,则他们将优先被移动到新卡片队列或是复习卡片队列的后面。 -- **暂停卡片 / 暂停笔记: ** 隐藏一个卡片或是相关笔记的所有卡片直到它们被手动取消暂停(你可在<>浏览器页面长按目标笔记实现取消暂停)。有时你想避免复习这个笔记,但又不想删除它的时候,这个选项会显得很有用。如果卡片被暂停的时候正处于学习状态,则他们会被优先移动到新卡片队列或是复习卡片队列的后面。 -- **删除笔记: ** 删除当前卡片相关的笔记的所有卡片。 - -重新播 :: 如果当前卡片有音频在它的正面或是背面,点击此按钮,音频将会再次播放。 -启用 / 禁用白板 :: 这个按钮可启用或禁用当前牌组的白板功能。白板功能可允许你在屏幕上涂鸦。 -当你在学习汉语,日语,或是阿拉伯语的时候,为当前牌组开启白板功能,来练习写字会很有用。 -当启用白板的时候,两个新的按钮将会出现,一个是清除白板上的内容,一个是隐藏白板,当禁用白板后,这两个按钮也会消失。 -牌组选项 :: 打开当前牌组的牌组选项,了解更多牌组选项的信息请参阅 http://ankisrs.net/docs/manual.html#deckoptions[desktop documentation]部分。 - -=== 卡片学习完毕 -当你学习完了今天到期的卡片,你将被带回到牌组列表并显示一个祝贺信息。从这里你可以选择另外一个牌组继续学习,或者你已经全部完成了今天的学习任务,你也可以轻轻地点击一下home键, -关掉ankidroid(当然,如果你愿意你可以在学习进行中关掉AnkiDroid)。 - -如果你想进一步学习当前的牌组,只要轻轻再次点击牌组,系统将给你几个选项可以使你继续学习,更多信息请参阅 <> 部分。 - - -[[添加笔记]] -== 添加笔记屏幕 -*_注意:_* 这部分假定你已经理解了什么是卡片,笔记,模板,字段和笔记类型 http://ankisrs.net/docs/manual.html#notes-&-fields[notes, fields, card templates, and note types] - -要添加笔记,只需在牌组列表页面轻轻点击右下角悬浮的‘+’号按钮,并选择添加即可。 -++++++++++ - -++++++++++ - -在添加笔记屏幕,下面的几个控件是可用的: - -笔记类型 :: 允许你选择你喜欢的笔记类型去添加笔记。 -对于大多数目的"基础" 笔记类型是足够的,但是如果你想产生一个额外的反转卡片,(例如,将原来现实在背面的信息显示在卡片的正面) -你可以选择“基础(和相反卡片)”笔记类型。 - -牌组 :: 允许你将生成的卡片改变所属的牌组。 - -字段 :: 在牌组选择器的下面是当前笔记的所有字段 (例如“基础”笔记类型有两个字段“正面”和“反面”). 轻轻点击一个字段, -键盘将自动弹出,允许你键入信息。 - -多媒体按钮 :: 在每个字段的后面有一个附件按钮,点击它,系统将允许你为此笔记添加媒体信息,(这个功能目前正在测试阶段). -添加图片按钮允许你通过设备上的相机或者系统的相册添加图片。 -录音功能允许你录制你的一段声音并放置到一个字段中。高级编辑器 -可以自动帮你在线搜索翻译和和发音音频。 - -标签 :: 调出一个对话框,让你从当前笔记中添加或是删除标签。 - -卡片 :: 它将显示这条笔记将能够生成的所有卡片的名字,轻轻点击按钮,系统将调出一个对话框,让你预览这些卡片。 -对话框中有当前笔记类型的相应卡片模板源代码。 从这里你可以编辑,预览,添加,删除卡片模板。欲了解更多卡片模板的相关信息请参阅 http://ankisrs.net/docs/manual.html#cards-and-templates[cards and templates section] 部分。 - - -当你完成卡片内容的输入工作,轻轻点击工具栏右侧的对号按钮,这条笔记将 -会被加入你的牌组集合中,如果你不想保存只想回到你之前那个页面,你只需要点击左上角的应用图标,或是点击 -你设备上的回退按钮即可。 - -[[编辑笔记]] -== 编辑笔记屏幕 -复习时,编辑笔记屏幕可以通过选择编辑打开,或通过在浏览器打开一个卡片。编辑屏幕类似于上面提到的添加新的笔记屏幕,但也存在一些关键的区别: - - * 在选定的卡上改变记忆库的操作(这是在“卡”框中强调)。 如果选择了一个具有多个卡片的笔记类型,则只有当前选定的卡片被移动到新的记忆库上。 - - * 改变“类型”下拉选择变化的笔记类型编辑模式。在这种模式下,编辑备注(即牌组、区域等)的内容被禁用,如果正在使用一个具有两个以上区域的自定义笔记类型,则会出现另外的按钮,可以让您控制区域的映射到新的笔记类型。 - -如果选择了一个比原来的笔记类型更少的卡片,只有第一个N卡片将被保存。例如从“基础(和相反卡片)”到“基础”只会导致第一张卡片被保存。为了警告你,在“卡片”框中的文本将出现红色,和一个显示之前保存说明的确认对话框。 - - 提示:在一次改变多个笔记类型,或定制卡片之间的映射时,使用浏览器中的桌面版Anki选择“改变笔记类型”。 - -在主菜单中也有几个高级选项: - -添加笔记 :: 创建一个新的空笔记 - -复制卡片 :: 复制当前笔记到一个新的可编辑的笔记中 - -重置进度 :: 将该卡片移到新卡片队列的结束。该卡片的当前状态被清除,但不是它的修订历史。 - -重新计划 :: 允许您在指定日期更改复习卡片。如果您输入已经学习的材料,而且你想以更高的初始间隔开始它,这个方法是有效的。 - -[[浏览器]] -== 寻找/搜索/浏览 -您可以通过点击来自<>的“卡片浏览器”按钮来搜索或浏览卡片。 - -++++++++++ - -++++++++++ - -浏览器屏幕开始在当前选定的牌组上显示所有的卡片。您可以通过点击顶部的放大镜图标搜索选定的牌组上的卡片。你可以通过左上角的下拉列表来选择牌组,从而改变选择的牌组(或改变所有牌组)。 - -默认情况下,浏览器中的第一列给出了将问题显示的文本(即正面)的闪卡,第二列显示答案的文本(即背面)的闪卡。 - -第一列也可以被配置为显示一个更紧凑的显示的 http://ankisrs.net/docs/manual.html#fields[“排序字段”] 。第二列通过点击列标题中的下拉菜单可以被配置为显示许多不同的参数。 - -请注意,因为您的滚动通过卡片的列表,列的内容是动态计算的。 - -从搜索结果,你可以点击一张卡片来编辑它(见上面的 <> 部分),或长时间点击它将显示一个菜单,允许你执行以下动作: - -标记/取消标记 笔记:: 从笔记中添加/删除“标记”标签。带有标记的笔记卡片被高亮显示在紫色中。 -暂停/取消暂停 卡片:: 暂停卡以黄色突出显示,并在复习过程中不显示。 -删除记录:: 请删除当前选定的卡片的说明,以及属于该说明的所有卡。如果没有从<>(备份)恢复,此操作将无法撤消。 -预览 :: 渲染当前选定的卡,以便您可以看到它看起来像在审阅。 - -=== 搜索 -AnkiDroid支持所有的搜索字符串,它的桌面版本,允许你执行相当复杂的搜索。一些例子: - - 标签:标记 :: 显示有标签“标记”的卡片 - - 是:由于 :: 只显示等待审阅的卡 - - 正面:新手 :: 显示只读卡片正面的字段正是“新手” - -对于一个完整的可能性列表,请看本节中的 http://ankisrs.net/docs/manual.html#searching[桌面手册] 部分。 - -另外,一些更常用的过滤器(标记,暂停,和标签卡)可以快速地应用,而无需手动输入他们从溢出菜单选择他们。您也可以从菜单中保存和召回常见的搜索查询。 - -[[过滤]] -== 过滤牌组 - -它的目的是优化学习过程,使你大多数记住的卡片的学习成本降到必要的最低数。一旦你的屏幕达到了,进一步的研究成为一个递减的回报:你将看到在同一张卡上花费的额外时间的数额一般不值得适度增加保留。 - -也就是说,如果你有一个测试迫在眉睫,或只是想通过一段时间,即使在你被显示的祝贺信息里,它也有可能继续审查。 - -“过滤牌组”是一个临时的牌组,包含基于各种标准的卡,如“忘记今天”,“被标记的“难”,等等。在经过筛选的牌组上的卡片,或当过滤后的牌组被删除,该卡片自动返回到他们原来的牌组。 - -创建一个过滤的牌组的最简单的方法是通过长时间点击一个牌组上,并选择“自定义学习”选项。 - -高级用户可以手动创建一个过滤的牌组,通过牌组列表屏幕上的溢出菜单选择“创建过滤的牌组”。 - -有关过滤后的牌组的进一步信息,请参阅 http://ankisrs.net/docs/manual.html#filtered[desktop documentation]。 -[[Anki桌面版]] -== 使用Anki的桌面AnkiDroid -Anki有一个免费的云同步服务称为AnkiWeb可以很容易的把你的卡牌在移动设备和电脑之间同步。如果你有一些不能使用同步的原因,使用USB这也是可能的,虽然这种方法更费力。 - -注意,AnkiDroid不隶属于它的桌面或AnkiWeb。AnkiDroid是基于它的桌面但它是由一个完全独立的志愿者社区开发的。 - -++++++++++ - -++++++++++ - -=== 通过云同步 -在您使用AnkiWeb之前,首先你需要创建一个帐户访问 https://ankiweb.net点击注册按钮。 如果你过去用过AnkiWeb,你可以跳过这一步。注册后,看到下面的相应的指令,这取决于你是否选择把你存在的牌组导入到AnkiDroid里面或从AnkiDroid导出。 - -==== 同步现有的牌组到一个新的AnkiDroid安装 -在这种情况下,你有一些现有的Anki牌组要通过同步AnkiWeb复制到一个新的AnkiDroid安装。打开Anki客户端与你现有的牌组(通常这会是Anki的桌面,但它也可能意味着一个版本的AnkiDroid你已经在另一个设备使用),然后单击“同步”按钮(其中有一个圈中的两个箭头)在牌组列表右上方。 - -如果你从未使用过ankiweb,在这之前如果提示,你需要输入你的凭据,然后按“上传AnkiWeb”按钮来确认你现有的AnKi里牌组是否与 AnkiWeb重合覆盖。AnKi将会上传你所有的卡片,图像和音频到AnkiWeb。如果你有很多媒体文件,这可能需要一些时间。 - -一旦同步完成,在设备上打开AnkiDroid可让你试图复制现有的牌组,点击顶部<> 的活动栏中的“同步”按钮。登录你的AnkiWeb信息后,AnkiDroid将下载你所有的卡片和媒体,并为下一次记住您的登录信息。 - -注意:在试图同步前如果你有任何存在的材料在AnkiDroid,你的上面会显示一条消息告诉你请你选择下载或上传到AnkiWeb。如果你乐意失去在AnkiDroid的卡片,它直接会选择“下载”。如果你需要与AnkiDroid合并现有的卡,那么你应该在继续前参阅<>部分。 - -第一个同步完成后,在你希望同步云变化的任何时候你都可以单击“同步”按钮,唯一的变化得是自上次同步被发送,随后的同步会更快。 - -如果您在桌面计算机上添加一些新的卡片,并希望同步到AnkiDroid,你会重复同样的基本过程:同步在桌面(或关闭程序,它自动同步关闭默认),然后在AnkiDroid点击同步按钮。 - -==== 从AnkiDroid同步到计算机 -从AnkiDroid同步计算机的过程基本上和从电脑同步AnkiDroid是相同的,但反过来就不同。 - -从<> 点击右上的同步按钮 (其中有一个圈中的两个箭头). 如果这是您第一次使用AnkiWeb,您可能需要输入您的登录信息,然后点击“上传”按钮上传你的AnkiDroid对AnkiWeb的收藏。 - -一旦同步完成,打开你的电脑Anki桌面版和按下同步按钮(在一圈两箭),AnKi将下载您的收藏。 - -[[AnkiWeb冲突]] -==== 解决AnkiWeb的合并冲突 -虽然这不经常发生,偶尔你的AnkiDroid的卡片上的结束的位置可能不会自动合并在AnkiWeb卡片。在这种情况下,无论是上传到AnkiWeb或从AnkiWeb下载都是必要,这将覆盖在另一边的任何变化。 - -如果你有新的卡片并想让双方保持同步,你可以为来自AnkiDroid每一个含有新的卡片导出一个牌组包 <>,然后当你选择同步“下载”,下载来自AnkiWeb。在同步完成后,你可以按<>部分从AnkiDroid导入你以前的牌组。 - -=== 通过USB - -如果您不经常上网,它仍然可以利用USB来回复制记忆库到你的设备。 - -USB方法是通过立即导入或导出你所有的记忆库。这意味着,不能像通过ankiweb同步,你不能改变两个位置然后合并他们。相反,如果你想添加卡片在桌面上,你需要确保从你的移动设备导出你的收集的最新版本,或你会最终失去在移动设备上任何评论的完成。 - -因此,您通常使用的工作流程是将您的collection从您的移动设备导出,并导入到桌面上,在桌面进行修改,然后导出您的收集,并将其导入到您的移动设备。 - -AnkiDroid不能直接导入文本文件。如果你想这样做,你需要做的是用桌面程序,然后将你的收集导入到AnkiDroid。 - -==== 通过USB从Anki桌面版复制所有记忆库到AnkiDroid - -在你的电脑上: - - . 打开桌面程序。 - . 从菜单中选择“文件”>“导出” - - . 单击“导出…”按钮。确保离开“所有记忆库”的选择,如导入个人记忆库到AnkiDroid是不可能的。“包含学习进度信息”也必须保持检查。 - . Anki会自动在桌面上创建一个collection.apkg。如果文件被命名为别的东西,请再次看上一步。 - . 通过USB电缆将你的Android设备连接到你的计算机。 - . 打开你的计算机上的文件资源管理器,查看您的安卓设备的内容。 - . 定位AnkiDroid文件夹。 - . 将collection.apkg文件从桌面拖动到这个AnkiDroid文件夹。 - -然后在AnkiDroid: - - . 在主屏幕上,从菜单中点击“导入文件” - . 点击"Collection" 然后确认 - -一旦完成,你的设备上的记忆库将被桌面上的记忆库替换。见章节<>与导入更多帮助。 -==== 通过USB从AnkiDroid复制所有记忆库到Anki桌面版 - -从 AnkiDroid复制你的记忆库到Anki桌面版的过程与上面基本相同,但反过来就不同。 - . 从你的设备断开USB - . 从主屏幕的主菜单中选择“导出collection” - . 确保“包含学习进度信息”保持检查和按** - . 从消息中指定的路径复制"collection.apkg"到你电脑的桌面上 - . 双击文件导入到Anki桌面 - -参阅<>下面的从AnkiDroid导出的更详细的信息。 - -[[导入]] -== 导入Anki文件 -你可以导入Anki文件(用.apkg文件格式)直接进入AnkiDroid。其他文件格式不能直接导入AnkiDroid,然而其它应用程序的卡片可以导入你电脑的Anki桌面版,然后可以<>。参阅 http://ankisrs.net/docs/manual.html#importing[importing section of the Anki Desktop manual] 得到的帮助。 -在Anki桌面, AnkiDroid有 http://ankisrs.net/docs/manual.html#exporting-packaged-decks[两种.apkg文件] ("collection package" and "deck package")的区分,Collection packages名称为"collection.apkg",导入完成时将取代AnkiDroid的所有内容。任何apkg文件是“not”命名为"collection.apkg",它被视为一个记忆库包,当它导入到AnkiDroid时,将与任何现有的内容合并。 - -你可以将.apkg Anki collection文件导入到AnkiDroid通过使用标准的Android系统打开它们,或通过手动从AnkiDroid导入它们: - -=== 使用安卓打开文件 -apkg文件是AnkiDroid自动关联,例如,如果你打开你发给自己的.apkg电子邮件附件,然后AnkiDroid会自动打开文件并确认您是否要导入。点击OK,apkg文件将被导入。 -=== 在AnkiDroid手动导入文件 -您还可以手动导入.apkg文件如下: - - * 通过USB将你的设备连接到你的计算机 - * 从你的电脑上复制.apkg到你设备上的AnkiDroid文件夹 - * 打开你的设备的AnkiDroid - * 从主菜单中的牌组列表中,选择“导入” - * 当有提示时,选择你刚才复制到你设备的apkg文件 - * 点击“确定” - -[[导出]] -== 导出Anki文件 -AnkiDroid可以在.apkg Anki文件格式中导出你的卡片以便你可以把它们导入到Anki桌面版,或把它们分享给其他人。 -在Anki桌面版, 你可以导出一个 http://ankisrs.net/docs/manual.html#exporting-packaged-decks[集合包或记忆库包],取决于你想实现什么。 - -有两个导出选项可供选择:“包含学习进度信息”和“包含媒体文件”。一般默认选项是足够的,如果你不选择包含学习进度信息,Anki会认为你与其他人共享的记忆库,并将删除标记和依附的标签,他们将有一个干净的副本。 - -=== 导出collection库 -当使用Anki桌面版导出时,你一般要导出你的整个collection,包括你所有的历史回顾等。 - -在记忆库屏幕的主菜单: - - . 点击菜单中的“导出”项目。 - . 点击“确定”使用默认选项 - . 再点击“确定”导出collection.apkg给你发电子邮件,或者你可以通过USB手动复制到你的计算机 - -在你的计算机上导入文件: - - . 保存“collection.apkg文件”到你的桌面 - . 双击文件开始使用Anki。 - . 确认你希望更换,以便你的移动端设备的记忆库覆盖你桌面上的旧数据 - . 导入后,如果你希望你可以删除你桌面上apkg文件。 - -=== 导出记忆库 -如果你想要把一个AnkiDroid记忆库分享给其他用户,你可以导出一个记忆库。 - -在记忆库屏幕的主菜单: - - . 你想导出,需要长时间点击记忆库 - . 点击“导出” - . 点击“确定”使用默认选项 - . 再点击“确定”导出apgk给另一个用户发电子邮件 - -[[备份]] -== 自动备份 - -AnkiDroid会自动为你创建你的collection备份。备份包括所有的卡片和统计数据,但不包括声音或图像。 - -当你首先启动应用程序时,备份在后台取得。如果上次创建备份以来已过了超过5小时,备份只会发生。默认情况下, AnkiDroid将保存最后8个备份;这个数字可以在主设置改变。 - -你可以从主菜单的<> 选择“恢复备份”选项恢复备份。 - -[[设置]] -== 首选项 - -可以通过打开导航抽屉,选择“设置”来访问首选项屏幕。它允许你自定义不同的应用程序设置和AnkiDroid如何出现。 - -覆盖在下面的首选项屏幕被划分成不同的部分。 - -=== AnkiDroid -这些都是影响整个应用程序的一般设置: - -AnkiWeb账户:: 更改用于与云同步的账户。同步的更多信息,请参见 <>。 -获得媒体同步:: 默认情况下,AnkiDroid将同步声音和图像以及你的卡片和历史回顾。如果你禁用此选项,声音和图像将不会通过AnkiDroid同步。 - -自动同步:: 如果你想AnkiDroid每次打开同步和关闭应用程序来启用此选项。这种行为每十分钟就有一次限制。一旦一个同步开始,你可以通过按下你的设备的后退按钮,但是它可以需要一些时间来取消采取的效果。 - -用户想要更细致的控制同步发生时,可以使用一个第三方应用程序像Tasker自动同步。想要获得更多同步信息,请参阅 https://github.com/ankidroid/Anki-Android/wiki/AnkiDroid-API#sync-intent[API documentation]。 - -记忆库的新卡片:: “使用当前记忆库”默认意味着Anki可以保存每一个记忆库最后使用的笔记类型,然后下一次在你选择的记忆库再次选择(并且,此外,当选择添加到任何地方时将从当前选定的记忆库开始)。另一个选项,“由笔记类型决定”,保存了每一个笔记类型最后一个使用的记忆库(当您选择“添加”时,打开“添加”窗口到最后一个使用的笔记类型。)如果每个记忆库你总是使用一个单一的笔记类型可能会更方便。 - -语言:: 改变语言 注:AnkiDroid都是由志愿者翻译的。如果你发现丢失或不正确的翻译,随时为翻译项目做出贡献 。更多详细资料可以在 https://github.com/ankidroid/Anki-Android/wiki/Contributing#translate-ankidroid[AnkiDroid维基百科]找到。 - -错误报告模式:: 当AnkiDroid崩溃,要控制AnkiDroid是否在发送错误报告给我们的错误报告系统之前请求你的认可。如果你希望你还可以完全禁用报告功能,。 - -==== 通知 -本款允许您设置何时以及如何使AnkiDroid在Android的通知栏显示通知。 - -通知时 :: “从不通知”将禁用AnkiDroid所有的通知。“正在等待的消息”将只显示重要的状态更新,如当一个同步完成。当你有超过N卡由于(需要启用的部件)“超过N卡到期”将显示一个通知。 - -振动:: 当显示一个通知时,你的设备会振动 -闪光:: 当有未读通知存在,你的设备会有光闪烁(如果你的设备有一个通知LED) - -=== 复习 - -当你复习卡片时,复习屏幕允许你自定义AnkiDroid表现。请注意,只有复习设置适用于显示在这里的所有记忆库。这有记忆库特定的更多有关复习的设置。这些记忆库上的特定设置位于记忆库上的选项。 - -新卡的位置 :: 当新的卡显示时控制:无论是所有的评论混合,之后,或之前。 - -下一天开始 :: 当AnkiDroid开始显示下一天的卡时控制。保证默认设置早晨4点,如果你学习在午夜时分,你在一个学习期间所显示的卡不会有两天的证明。 -会话。如果你熬夜很晚或很早醒来,你可能想调整到一个你通常睡觉的时间。 - -学习进度的限制 :: 当目前记忆库没有什么学习但是卡片还在学习状态,学习进度的限制可以告诉AnkiDroid怎么做。20分钟的默认设置,告诉AnkiDroid如果他们将在不到20分钟内被显示并且没有其他事情做,卡片应该及早显示。如果设为0,Anki将永远等待全期,直到剩下的牌已经准备好了才显示祝贺屏幕。 - -时间段限制:: 时间段是一个技巧通过把一个较长活动划分为小阻碍来帮助集中精力(例如30分钟的学习期间)。如果你设置的时间段的时间限制在一分钟内不为零的数,AnkiDroid会周期性的显示一条消息说你在规定期限成功学习了多少卡片。 - -==== 显示 -本节涉及在复习过程中方式卡的显示 - -保持在屏幕上 :: Android忽略自动屏幕超时设置总是保持在屏幕上 - -全屏模式 :: 切换到一个身临其境的全屏模式,这样你可以使用更多的屏幕。可以在“隐藏系统栏”之间进行选择,该“隐藏系统”栏将隐藏系统状态栏、动作栏和底部导航按钮。或者,你可以选择“隐藏系统栏和回答按钮”,这将隐藏一切除了实际的卡片内容本身。你可以从系统栏向内滑动(即向下或向上)暂时退出全屏模式。 - -注意,身临其境的全屏模式只支持Android 4.4 + - -中心对齐 :: 默认情况下AnkiDroid试图和AnKi桌面显示卡片完全一样,但是如果你喜欢你的卡片在AnkiDroid中心垂直对齐就可以启用此功能。 - -显示按钮的时间 :: 默认情况下,答案按钮将显示下一个被显示的时间卡片。如果您禁用此选项,则该次将不会出现,只有“再次”、“好”和“易”等标签将被显示出来。 - -卡片放大 :: 在这里您可以增加卡片内容的缩放级别(不包括图像)。如果你想增加所有卡片的字体大小,你可以使用这个选项。 - -图像的缩放 :: 在这里你可以增加嵌入在你的卡片中的任何图像的缩放级别。 - -回答按钮的大小 :: 如果你发现很难按这个答案按钮,你可以使用这个设置,使它更大。 - -显示剩余 :: 禁用这个允许您隐藏屏幕的左上角的卡计数。 - -==== 电子白板 -本小节控制阅读者中的白板。 -注意:在研究屏幕中的菜单中,必须在每一个单独的记忆库上启用白板。 - -笔画宽度 :: 控制白板的笔画宽度。减少笔画宽度可以让你更详细地绘制。 - -黑色笔触 :: 使用黑笔画代替颜色,这可能会减少内存的使用。注意:当启用了夜间模式时,此设置不适用。 - -==== 自动显示答案 -自动显示应答功能允许你在一段时间后自动显示答案。您还可以自动显示下一个问题;在这种情况下,该卡片被假定为失败(即再次按钮被自动选择) - -时间显示答案 :: 等待时间直到答案自动显示 - -显示下一个问题的时间 :: 等待时间直到下一个问题会自动显示。 - -=== 字体 -在这个屏幕你可以使用AnkiDroid改变字体,和一些相关的字体缩放选项。 请参阅 <> 部分获得有关使用自定义字体的更多信息。 - -默认字体 :: 选择AnkiDroid阅读使用默认字体。您可以通过将它们复制到“字体”文件夹中,将字体添加到列表中。 - -默认字体的适用性 :: 默认设置通过Anki桌面,当卡片样式没有指定字体时只使用默认字体,但是你也可以强制默认字体被应用,忽略卡片样式的任何字体规范。 - -浏览器和编辑器字体 :: 字体是由浏览器和编辑器使用 - -卡片浏览器字体缩放 :: 让你更改卡片浏览器中使用的字体大小。 - -[[手势]] -=== 手势 -AnkiDroid允许你定制界面,以便通过频繁执行的点击和滑动手势行为可以迅速完成。 -==== 行动 -可以使用以下的手势: - - * 向上滑动 - * 向下滑动 - * 向左滑动 - * 向右滑动 - * 双触摸 - * 向上触摸 - * 向下触摸 - * 向左触摸 - * 向右触摸 - -以下操作可用于每个手势: - -没有行动 :: 如果你想禁用某些动作,开发区等。不要做任何事情。 - -回答按钮1 :: 当答案屏幕显示时,选择红色的按钮,表明你希望再次复习该卡片。这是有用的,当你忘记了一张卡片或希望更频繁地回顾它。当问题被显示时,这个动作(和下面的所有其他回答动作)将简单地显示答案。 - -回答按钮2 :: 当答案屏幕显示时,选择左边的第二个按钮,一般表示你发现卡片很难记住。 - -回答按钮3 :: 当答案屏幕显示时,选择左边的第三个按钮。 - -回答按钮4 :: 当答案屏幕显示时,选择左边的第四个按钮(适用时)。 - -推荐答案(绿色) :: 当答案屏幕显示时,选择“绿色”按钮。这是你应该使用最多的按钮。 - -回答好不如推荐 :: 当答案屏幕显示时,选择右边的按钮,表明你发现该卡太容易记住,并想要一个更长的延迟。 - -撤销 :: 撤销上一个操作。 - -编辑卡片 :: 编辑当前卡片。 - -标记 :: 在当前记录添加一个称为“标记”的标签,所以它可以很容易地在搜索中找到。 - -查询表达式 :: 当查找功能启用(在高级设置),查找在选定的字典中的表达式。注意:在这个操作将工作之前,需要将表达式复制到剪贴板。 - -会员卡 :: 从回顾中隐藏当前卡片。 - -暂停卡 :: 回顾期间防止当前卡片被显示,直到你通过卡片浏览器不暂停它。 - -删除记录 :: 删除当前显示的记录和所有的卡片。 - -播放媒体 :: 在卡片上重播任何音频。 - -中止学习 :: 停止复习,并回到记忆库上的概述页面。 - -隐藏笔记 :: 埋葬当前的笔记(即隐藏它,直到第二天)。 - -停止记录 :: 暂停当前的记录(即隐藏它,直到你不暂停它)。 - -=== 高级 -这里显示高级用户的一些不常见的功能 - -收藏路径::改变AnkiDroid的数据存储的位置(不推荐) - -完全同步 :: -点击这个项目,迫使下一个同步进行一个完整的上传或下载(例如,因为你不小心删除了一个记忆库的一边,并希望恢复记忆库,而不是删除同步)。 - -高级统计 :: -考虑到在“预测”图的未来的评论效果。更多信息在<>. - -==== 解决方法 -输入答案到卡片 :: -如果你已经设置了你的卡片,要求你输入答案(解释在 http://ankisrs.net/docs/manual.html#templates[桌面手册这部分]), AnkiDroid将在卡片显示键盘,让你检查你的答案。 - -当用电子白板和手势操作时为了提高用户的体验,我们使用从卡片分离出的一个输入框,这与Anki桌面版功能工作的方式不一致。 - -与它的桌面完全一致,你可以启用此选项允许你保存屏幕区域,并选择合适的字体(如日本和中国)的输入框。 - -输入方法 :: -一些旧的设备无法将焦点集中到输入的答案字段的文本输入框中,所以这是添加(隐藏的API>14)。 - -长按方法 :: -一些老设备无法检测长按启动选择/复制文本,所以这是添加(隐藏的API>10)。 - -修复希伯来元音 :: -一些旧的设备无法提供希伯来文本,所以这个功能被添加,它允许用户下载并安装一个希伯来字体,这是已知的工作(隐藏的API>15)。 - -文本到语音 :: -启用此选项让Android读取你的所有卡片上使用默认的文本到语音引擎的文本。谷歌内置的TTS引擎工作;第三方TTS引擎可能或不可能。一旦每一个记忆库上的第一次回顾在记忆库的卡片上,AnkiDroid会要求你选择前面的语言和你的卡片背面。改变语言,或者做出你最初的选择后对一个给定的记忆库禁用TTS,你需要使用“重置语言”选项说明如下以及各个记忆库重新配置。 - -此功能可能在未来会被删除,有利于一个单独的可下载插件 - -查字典 :: -阅读者可以用字典将查找的单词复制到剪贴板中。在设置一个字典后,做以下来执行查找: - - * 长按你想复制的文本 - * 在选择要复制的单词后,在屏幕顶部的功能栏中按“复制”图标 - * 点击一次卡片上的任何地方 - * 当单击时执行查找,一个放大镜图标会出现 - -另外,查找动作可以通过一个手势来执行。 - -此功能可能在未来会被删除,有利于一个插件 - -重置语言 :: -用于重置TTS语言 - -电子阅读器(上/下按钮) :: -支持电子书阅读器的硬件按钮 (参阅 https://github.com/ankidroid/Anki-Android/issues/1625[issue 1625]) - -此功能可能在未来会被删除,有利于一个插件 - -电子书阅读器的双滚动 :: -当使用电子阅读器硬件按钮双滚动距离 - -== 高级功能 -[[反转卡片]] -=== 反转卡片 -Anki的系统有 http://ankisrs.net/docs/manual.html#note-types[内置的笔记类型,允许您在两个方向上复习卡片] 。 当在AnkiDroid <> ,你应该选择一个笔记类型,如“基础(和相反卡片)”,它会自动生成一个反向的卡片给你。 - -++++++++++ - -++++++++++ - -如果你使用了错误的笔记类型添加你的资料,你可以通过 <> ,或者你可以在Anki桌面版立即使用浏览器更改多个卡片的笔记类型。为此,按照指示在 <> ,然后在AnKi的桌面打开浏览器,选择要更改的卡片,然后从菜单选择“改变笔记类型”。 - -另外,如果你的卡片使用的是自定义卡片布局不包括反向卡,您可以按照下列指示,Anki桌面用户手册的 http://ankisrs.net/docs/manual.html#reverse-cards[部分反向卡] 编辑笔记类型。然而使用Anki桌面版不太方便,也可以直接在AnkiDroid编辑笔记类型;更多详情查看<>。 - -[[自定义字体]] -=== 自定义字体 - -AnkiDroid允许你在你的卡片上使用非系统字体。设置得当,强烈建议使用Anki的桌面官方的方法。更多信息请看 http://ankisrs.net/docs/manual.html#installingfonts[桌面手册中的相应部分] - -或者,你可以在AnkiDroid主目录创建一个新的“字体”子文件夹(即在设置下指定的文件夹>AnkiDroid>Collection路径指定的文件夹),在那复制一个兼容的字体文件(即,TTF),然后将此设置为设置下的默认字体>字体>默认字体。注意:这种方法将改变你的所有卡片的默认字体,而官方的方法可以更具体。另外,如果您同步AnkiWeb,使用这种方法会导致在不同的设备上显示不同的卡片。 - -只有TTF字体格式在Anki/AnkiDroid官方支持; https://www.google.com/get/noto/#/[Google Noto] 所有语言中字体集是高度推荐的,其他一些免费的字体可以在 https://github.com/ankidroid/Anki-Android/wiki/Freely-distributable-fonts[这里] 发现. - -请注意,AnkiDroid 必须加载整个字体到内存中才能使用它,亚洲语言的字体可以是相当大的。如果你有一个旧的设备,安装字体后注意到AnkiDroid经常崩溃,你可能已经超出了你的设备的内存限制。谷歌Noto,是不推荐使用的组合CJK字体,而是在 https://github.com/googlei18n/noto-cjk[分别从这里] 获得个人语言。 - -*注1*:如果你有禁用“同步获取媒体”,你可能需要从AnKi桌面手动复制字体文件夹到你的AnKiDroid/collection.media文件夹。 - -*注2*:在Anki桌面手册这里执行下面的步骤后如果你不能让你的字体工作,请参阅如何调试字体问题的详细步骤的常见问题 https://github.com/ankidroid/Anki-Android/wiki/FAQ#i-followed-the-instructions-in-the-manual-but-i-still-cant-get-my-custom-font-to-work[如何调试字体问题的详细步骤]. - - -[[定制卡片布局]] -=== 定制卡片布局 -卡片布局是完全可定制的,虽然这是有关一个相当陡峭的学习曲线的高级话题,你可能会发现它在<> 更方便做定制。 - -Anki桌面手册的 http://ankisrs.net/docs/manual.html#cards-and-templates[卡片模板部分] 有如何编辑笔记类型的详细说明,大部分的行动的讨论也可通过AnkiDroid点击备注编辑器的底部的“卡片”,或选择记忆库选择器的“管理笔记类型”选项。由于定制卡片布局的详细信息在Anki桌面手册,它将不会在这里重复。 - -有各种提示 AnkiDroid 维基 https://github.com/ankidroid/Anki-Android/wiki/Advanced-formatting[高级格式的页面] 让你从你的卡片格式中获得最多的格式,我们鼓励你去阅读它,如果你有任何你想与社区分享的技巧,就可以自由编辑它。 - -[[回答类型]] -=== 回答特征的类型 - -AnkiDroid允许你输入正确答案,然后将其与正确答案进行比较。你必须在AnKi桌面设置这个,正如AnKi桌面手册描述的。 http://ankisrs.net/docs/manual.html#checking-your-answer[AnKi桌面手册]. - -Anki桌面用卡片的输入框取代卡片前面的“{{类型:NN}}”字段。在AnkiDroid是“......”取代的,在底部有一个文本输入框。比较式文本和正确的文本是显示在回答侧边“{{类型:NN}}”字段的地方,像AnKi桌面。 - -文本输入框和软键盘可以通过首选项点击“禁用输入答案”隐藏。 - -即使输入禁用,正确的答案也显示在答案侧。这是故意的,否则正确的答案可能根本无法显示。 - -隐藏的比较(因为正确的答案无论如何都显示),HTML ID“typeans”可以用。使用Anki桌面添加“.mobile #typeans {display: none;}”到 http://ankisrs.net/docs/manual.html#cards-and-templates[卡片样式]。 - -回答提示类型和比较有更多的类可以用来改变它们显示的方式。其中一些与AnKi桌面的类似,一些具有AnkiDroid的特征。 - -比较使用三类,typegood,typebad和typemissing添加绿色,红色和灰色背景的分型比较。这三类也在Anki的桌面使用。 - -“......”提示有类”typeprompt”。 - -当在首选项中键入设置为关闭时,“typeOff”类在问题侧添加提示,并有包含答案比较方面的div元素。这个类可以用来显示类型提示或隐藏在这种情况下的键入比较。 - -[[高级统计]] -=== 高级统计 -注意: 高级统计可以从v2.6alpha7用。现在有必要使用一个开发建设<> 来使用它们。 - -如果高级统计被启用,它改变了“预测”的图表,使它显示了评论的估计数量,将在未来的一天,考虑到未来的评论,学习新的卡片和失败卡片。如果你每天学习所有的卡片,功能栏和左轴会在每一天显示卡片的数量,而线和右轴显示看不见的数量(如“学习”),如果你每天学习所有的卡片,你的记忆库和collection将由年轻的和成熟的卡片组成。预测图做计数的评论,目前是逾期的。它假定过期的卡片将根据“最大评论/日”记忆库选项进行回复。 - -高级统计可以在设置中启用→高级→高级统计(在插件部分)。 - -未来评论的结果,未来的评论后学习和失败的卡片影响评论。考虑到这一点,从审查日志计算每个结果的概率。然后结果是随机选择的,相比不太可能根据审查日志,这样的结果更可能根据审查日志。设置都会影响如何考虑未来的评论对随后评论结果的影响。 - -计算第N天,模拟部分 :: -如果此设置被设置为一个大于0的数,而不是随机选择一个结果,每个可能的结果连同它的概率是考虑到模拟中的。概率是考虑到图形和未来的评论的结果,这也影响到图。一次审查有两个可能的结果(说4),这都是一个回顾的结果。该审查也有几个可能的结果等。如果许多评论是模拟这种方式,许多评论(4 x 4 x 4 x…)必须考虑增加时间构成该图。因此,通过随机选择一个结果,模拟从现在开始的N天以后的评论。 - - 总之,较高的N给出了一个更精确的图形,但它需要更多的时间来组成的图形。 - -精密的计算 :: - -评论发生的概率小于100%减去通过随机选择一个结果进行模拟的配置精度,而不是考虑到每个可能的结果。此设置只适用第一N天计算。如果高级统计被禁用,如果你不复习卡片,不学习新的卡片和无效的卡片,“预测”图表将在未来的一天,显示评论的估计数量。 - -总之,更高的精度给出了一个更精确的图形,但它需要更多的时间来组成图形。 - -仿真迭代次数 :: -几次组成图,然后显示这些图的平均值。每一个时间图组成,另一个结果可能是随机选择的。如果我们的平均有许多结果是从审查日志随机选择考虑到的概率,平均结果可能会接近审查日志中的平均概率。如果我们的平均许多图表,平均图很可能是接近的图表,这是考虑到所有可能的结果。如果平均的图的数量不是太高,它将比考虑所有可能的结果要快得多。 -总之,一个更高的迭代次数给出了一个更精确的图,但它需要更多的时间来组成图。 - -[[beta测试]] -=== beta测试 -如果你想在AnkiDroid尝试最新的功能,你可以报名参加beta测试程序如下: - - . 访问 https://play.google.com/apps/testing/com.ichi2.anki[Google Play Beta page] - . 单击成为一个beta测试仪 - -在遵循这些步骤后,最新的测试版本将自动安装,作为普通更新,Google Play以同样的方式。如果你更喜欢冒险,你也可以成为一个阿尔法测试仪,除了执行上述步骤进行测试外,也可以通过加入 https://groups.google.com/forum/#!forum/ankidroidalphatesters[alpha testers group]。 - -根据link:help.html[主要帮助页面],请提交你在这些开发版中发现的AnkiDroid问题跟踪器的任何错误。 . - -如果你想在任何时候离开测试程序,只需访问 https://play.google.com/apps/testing/com.ichi2.anki[Google Play Beta page],然后单击“离开测试”。 - -[[贡献]] -== 贡献于AnkiDroid -AnkiDroid是一个开源项目,其发展依赖于志愿者的贡献。 这里有一些你可以贡献给ankidroid项目的方式: - -参与 :: 下载应用程序,加入 https://groups.google.com/forum/#!forum/anki-android[AnkiDroid论坛] 并回答其他用户的问题 ,提交错误报告,成为一个beta测试仪 <> 等。你可以作为一个非开发者在 https://github.com/ankidroid/Anki-Android/wiki/Contributing[维基百科] 发现更详细的信息。 - -翻译 :: AnkiDroid和用户手册的翻译都是由用户贡献,不胜感激。看 https://github.com/ankidroid/Anki-Android/wiki/Contributing#translate-ankidroid[翻译] 维基页面的详细说明有助于翻译。 - -发展 :: AnkiDroid源码在我们主要的 https://github.com/ankidroid/Anki-Android[Github page] ,bug修复和新功能很受欢迎。 -投资大量的时间在一个新的功能之前,如果它有可能被合并到主要项目,你可能会想先在论坛上问,因为不是所有的功能将被接受。 -如果你刚刚开始使用的是安卓编程,可以在论坛上随意为一些适合初学者提出一些技巧和/或任务。 diff --git a/manual.asc b/manual.asc deleted file mode 100644 index 09ace8d..0000000 --- a/manual.asc +++ /dev/null @@ -1,1243 +0,0 @@ -:docinfo1: -:toc: -:experimental: - -= AnkiDroid 2.16 User Manual -:sectanchors: - -== Introduction - -Thank you for using AnkiDroid, the Android client for the popular -http://ankisrs.net/[Anki] spaced repetition system. - -Anki is spaced repetition technique which is simple but highly effective. It helps you memorize things by automatically repeating them across increasing intervals based on your responses with no need for you to keep track of what to study or when to study it. You create notes (or download shared decks) with content you need to memorize, and the scheduler will make sure you see the content when you need to. - -AnkiDroid is intended to be used in conjunction with Anki on your computer. While it is possible to function without it, -some tasks are either only possible with, or a lot more efficient with Anki Desktop. Furthermore, it is *strongly recommended* to at least read https://docs.ankiweb.net/getting-started.html#key-concepts["Key Concepts"] section of the main Anki manual to understand the terminology used here. - -If this manual doesn't contain what you are looking for, please check the https://github.com/ankidroid/Anki-Android/wiki[AnkiDroid Wiki] for a list of changes, instructions for submitting bug reports and feature requests, a list of frequently asked questions, and much more. - -[[gettingStarted]] -== Getting started -To start using AnkiDroid, we need to add some cards to study. From the main screen, tapping the big blue plus button will allow you to either add a new "note" (i.e. create new flashcards), download shared decks (decks that other people have created and shared online), or create new empty decks. - -Please watch this 5 minute https://www.youtube.com/watch?v=F2K1gOSdIZA[tutorial video], which gives an introduction to adding, downloading, and studying cards in AnkiDroid. More detailed information can be found in the sections below. - -If you are an existing user of Anki Desktop wishing to import your decks from the computer, -you might like to skip straight to the <> section. - -[[deckPicker]] -== The Deck List -*_Note:_* _This section onwards assumes you understand what https://docs.ankiweb.net/getting-started.html#key-concepts[decks and cards] are_ - -The deck list is the screen you see when you start AnkiDroid. It displays a -list of the decks which contain all of your flashcards, and allows you to perform various actions: - -++++++++++ - -++++++++++ - -=== Add button -The big blue + button in the bottom right corner is used to add new material to AnkiDroid. Pressing it expands to give the following three options, which are also described in the https://www.youtube.com/watch?v=F2K1gOSdIZA[tutorial video]. - -Add :: Choose this option if you want to create your own flashcards (notes) with AnkiDroid. "Notes" and "cards" have specific meanings in Anki, which are https://docs.ankiweb.net/getting-started.html#key-concepts[explained in the main Anki manual]. Please see the tutorial video for a quick introduction to adding notes, or refer to the <> section below for more detailed information. - -Get shared decks :: To download a deck of cards from the internet that another user has contributed: - . Ensure you're connected to the internet. - . Tap + and then *Get shared decks*. AnkiWeb will open. - . Select a category, or type in a search. - . Tap *Info* on a deck you'd like to study. - . Scroll down and tap *Download*. - . You browser will download the file and display a "download complete" notification. - Tap this button. - . AnkiDroid will appear, and show a confirmation dialog. Tap the *Add* button. - . When the import completes, your deck should be ready to study. - -Create deck :: To create a new empty deck: - . Tap the + button and choose "Create deck" - . Choose a name for the deck, for example "New Japanese" - . Add cards to it following the "Add" instructions above - -=== App Bar -At the top of each screen in AnkiDroid is the App Bar, with buttons for performing various actions. -The following actions are available from the app bar in the deck list: - -Navigation menu button :: Tapping the icon on the far left will show the <> for quickly navigating between the main parts of the app. - -Sync button :: The circular button with arrows on the right is for synchronizing your cards with the cloud, as described in the -<> section. - -Overflow menu button :: On the far right is the overflow menu which contains less commonly used actions. These actions are described further below. - -**Hint:** long tapping on a button in the app bar anywhere in the app will display a textual hint describing what the -button does! - -=== Studying a Deck -To study the cards in a deck, simply tap on the deck name (or the "STUDY" button on a 10" tablet), and AnkiDroid will switch to study mode. - -Note that the currently selected deck is highlighted with a grey background, and if you have any <> they will be highlighted using a blue font. Filtered decks are discussed elsewhere in the manual. - -=== Other Deck Actions -Long tapping on a deck will show a list of other actions available to perform on that deck: - -Rename deck :: Use this option to rename a deck - -Deck options :: Tapping on deck options allows you to configure various deck specific study options. -Please see the https://docs.ankiweb.net/deck-options.html#deck-options[desktop documentation] for more information about these study options. - -Custom study :: Allows you to choose from some convenient presets for studying outside of your normal schedule, for example increasing the study limit for the day. See the section on <> for more detailed information. - -Delete deck :: Use this option to delete a deck (note: this action is not reversible, although you can <>) - -Export deck :: This option can be used to share a deck with other users. See the <> section for more information. - -Unbury :: This option is only visble when the selected deck has cards that have been manually or automatically buried. - -Rebuild / Empty :: If the selected deck is a <> then you also have the option to rebuild or empty the cards in it. - - -==== Clickable areas on the decks -Each deck in the list has three clickable areas: - -Deck expander :: If you are using -https://docs.ankiweb.net/getting-started.html#decks[subdecks], then a deck expander button may appear on the far left of the deck, which can be used to show / hide the subdecks. A ▶ icon means the deck has hidden subdecks which can be shown, a ▼ icon means the deck has visible subdecks that can be hidden, and no icon means that the deck has no subdecks. Note: subdecks can be created by using the naming convention "PARENT::CHILD". - -Deck name :: This is the main clickable area, which will take you to the study screen if there are cards available to review. - -Count buttons :: The count buttons on the far right of each deck act as a separate clickable area that takes you to the deck overview instead of the study screen. This can be useful if you want to quickly view the number of cards available in the deck. - -=== Advanced Actions -Some additional actions are located in the overflow menu for less common tasks, which are summarized below: - -Undo :: After reviewing the last card in a study session, you can undo it from here. - -Check database :: This can automatically fix a lot of problems with your database, and will also purge any unused tags. If you experience any problems with your collection, this is the first action you should try. - -NOTE: Under some circumstances, check database will move cards to a deck named _!Recovered Cards_. If this occurs, please move the cards to an appropriate deck via the <>, and delete _!Recovered Cards_ when it is empty. - -Check media :: Try to run this if you experience any issues with media syncing. - -Empty cards :: Remove any empty cards from your collection. See the link:++https://docs.ankiweb.net/templates/generation.html#card-generation--deletion++[desktop documentation] for more. - -Restore from backup :: Allows you to restore from one of AnkiDroid's <> - -Manage note types :: Allows you to add, edit, and delete note types. See the <> section for more help with this advanced feature. - -Import :: Import a .apkg anki file containing a deck. See the <> section for more. - -Export collection :: Export entire collection as a collection.apkg file. See the <> section for more. - -=== Deck Counts -Next to each deck, three numbers are displayed. The left, blue number, corresponds to how -many new cards you have to learn today. Anki will introduce 20 new cards a day by default, -and you can customize this number if you'd like. The red number in the middle is for the cards -due to be studied today which are currently in the learning phase, and the green number is the -cards which are due for review (i.e. cards which have already graduated from the learning phase). On a deck -you've never studied before, these numbers will both be zero. - -As explained above, tapping on the counts will take you to the deck overview screen. - - -[[drawer]] -== Navigation Drawer -++++++++++ - -++++++++++ - -The navigation drawer can be opened from most places in the application by pressing the left menu icon, -or alternatively swiping outwards from anywhere on the far left side of the screen. It is used -for quickly navigating between different parts of the application. You can switch to the following screens: - -Decks :: Takes you to the top level of the app where the list of cards are shown (<>) -Card Browser :: Shows a list of all your cards (<>) -Statistics :: Helps you track your study progress (https://docs.ankiweb.net/stats.html#statistics[more info in Anki manual] and <>) -Night mode :: This switches the app to a dark theme which many users find is less straining on the eyes, particularly when reviewing in the dark. See the https://github.com/ankidroid/Anki-Android/wiki/Advanced-formatting#customize-night-mode-colors[wiki] for instructions on how to customize the card background and font color used in night mode. -Settings :: Allows you to customize the app (<>) -Help :: Opens this web page -Send feedback :: Get support from the AnkiDroid team - -[[deckOverview]] -== Deck Overview Screen -++++++++++ - -++++++++++ -From the deck list, if you tap the counts area you will be taken to the deck overview screen. On tablets it is always shown in the area to the right of the deck list. - -On this screen you can view a summary of the deck, build custom study sessions, rebuild / empty filtered decks, and change deck options. When visible, pressing the study button will take you to the study screen for that deck. - -=== App bar -The icons that are shown in the app bar depend on whether your deck is an ordinary deck or a filtered deck. - -==== Ordinary decks - -Custom Study :: Tapping the wrench icon allows you to create a custom session, for example to do extra reviews outside your normal schedule, or study only certain cards inside a deck. See the <> for more information on this. - -==== Filtered decks - -Empty deck :: Tapping the cross icon will empty all of the cards in the current filtered deck (i.e. return them to their original deck). - -Rebuild deck :: Tapping the rebuild icon will rebuild the current filtered deck according to the settings specified in filtered deck options. - -==== Overflow menu - -Deck Options :: Allows you to configure some options related to the current -deck, such as the number of new cards and reviews to introduce each day. -Please see the https://docs.ankiweb.net/deck-options.html#deck-options[desktop documentation] for more information about these study options. - -Unbury :: This option is only visble when the selected deck has cards that have been manually or automatically buried. - -[[reviewer]] -== Study Screen -Tapping on the deck name from the deck list, or the study button from the deck overview screen will take you to the study screen where you do your study. -++++++++++ - -++++++++++ - -=== Basics -If you have not used Anki on a computer before, you may like to have a look at the -first https://docs.ankiweb.net/getting-started.html#videos[intro video] -before reading on, as it explains the basic review process. - -On the top left of the screen you'll see three numbers. From the left, these -correspond to new cards, learning cards, and cards to review. These are -explained in more detail in the intro videos for the desktop program, so -please https://docs.ankiweb.net/getting-started.html#videos[check them out] -if you haven't already. - -When you've looked at a card's question and remembered the answer, or decided -you don't know it, tap the *show answer* button. When you do, the bottom area will change to display 2-4 answer buttons, -depending on how you've answered the card previously. The buttons will display -the time a card will next be shown, so 10m means "10 minutes" and "5d" means -"5 days". You can tap directly on these buttons to choose a particular answer. - -To make reviewing faster, you can configure gestures (for example taps and swipes) to answer cards without using the buttons. -See the <> for more information on configuring gestures. - -=== App Bar -The App Bar at the top of the study screen has several buttons for performing various common actions. The number of buttons which are shown -is determined automatically by Android based on the size and resolution of your screen. If there is not enough space to show the button -for a given action, then the action will be available from the menu instead. If you are unsure what a button does, you can long-tap on it to -see the name of the action. The following action are available: - -Undo :: Undo the answer you chose for the last card you studied (button always shown). -Mark Card :: Adds a "marked" tag to the current note, so it can be easily found in the browser. -This is useful when you want to take some action on the note at a later date, such as looking up a word when you get home. Marked cards also show a small star in the upper-right-hand corner during reviews. -Flag Card :: Adds a color coded "flag" (red, orange, green, or blue) -This can be used as a general purpose indicator to differentiate your cards. Flags are represented by a number from 1-4, corresponding to the previously listed colors. -Edit Card :: Open the edit note screen, where you can change the content displayed on the flashcard (see the <> for more help) -Hide / Delete :: Give options to bury, suspend, or delete the current note or card - -- **Bury card / Bury note: ** Hides a card or all of the note’s cards from review until the next day. (If you want to unbury cards before then, you can choose “unbury” from the long-press menu in the <>, or from the <>.) This is useful if you cannot answer the card at the moment or you want to come back to it another time. Burying can also happen automatically for cards of the same note. If cards were in learning when they are buried, they are moved back to the new card queue or review queue prior to being buried. -- **Suspend card / Suspend note: ** Hides a card or all of the note’s cards from review until they are manually unsuspended (by long-tapping a card in the <>). This is useful if you want to avoid reviewing the note for some time, but don’t want to delete it. If cards were in learning when they are suspended, they are moved back to the new card queue or review queue prior to being suspended. -- **Delete note: ** Deletes the note and all of its cards. - -Replay Audio :: If the card has audio on the front or back, it will be played again. -Enable / Disable Whiteboard :: This action enables or disables the whiteboard feature for the current deck. The whiteboard feature allows you to draw on the screen, -which is particularly useful for practicing drawing characters from languages such as Japanese. When the whiteboard has been enabled for the current deck, -two new actions will become available for clearing and hiding the whiteboard. Disabling the whiteboard will hide these actions as well as the whiteboard itself. -Deck options :: Open the deck specific study options. See the https://docs.ankiweb.net/deck-options.html#deck-options[desktop documentation] for more information about these study options. -Check Pronunciation :: This action enables or disables the temporary audio recorder toolbar at the top of the card. This feature allows you to record your voice and replay it. It is used primarily to check your pronunciation. This toolbar is composed of three buttons: play, stop playing and record microphone audio. This tool can be used while viewing either the question or the answer. - -=== Reaching the end of the study session -When you've finished the cards that are due to be studied today, you'll be taken back to the decks list and shown a congratulations message. From here you can select a different deck, or if you've finished studying for the day, you can simply tap the home button in order to -close AnkiDroid (and you can also do this in the middle of reviews if you -wish). - -If you wish to keep studying the same deck further, tap on the deck again which will give you several options for continued study. Please see the <> section for more on custom study. - - -[[addingNotes]] -== Add Note Screen -*_Note:_* _This section onwards assumes you understand what link:++https://docs.ankiweb.net/getting-started.html#notes--fields++[notes, fields, card templates, and note types] are_ - -To add a new note, tap the + button at the bottom of the deck list and choose "Add". -++++++++++ - -++++++++++ - -The following controls are available in the add note screen: - -Type :: Allows you to select the type of note you'd like to add. -For most purposes the "Basic" note type is sufficient, but for example if you would like an extra card generated which is the reverse of the main card -(i.e. shows the "Back" field on the front of the card), you could chose the "Basic (and reversed card)" note type. - -Deck :: Allows you to change the deck the generated card/cards will be added to. - -Fields :: Below the deck selector are the fields for the note (for example the "Basic" note type has two fields "Front" and "Back"). When you tap on a field, -a keyboard will come up, allowing you to type in information. - -Media Buttons :: Next to each field is an attach icon, which allows you to add media to your note (this feature is currently in the experimental phase). -Add image lets you add images either via your device's camera (if it has one), or from your photo library. -Record audio allows you to record your voice and place it into a field. The advanced editor lets you automatically -search for translations or pronunciation audio files online. - -Tags :: Brings up a dialog which lets you add / remove tags from the note. - -Cards :: Shows the names of the cards which will be generated for the selected note type. Tapping on this button will bring up a dialog which lets you preview -the source code for the card template of the selected note type. From here you can edit, preview, add, and delete card templates. See the https://docs.ankiweb.net/templates/intro.html#card-templates[cards and templates section] of the Anki Desktop manual for more information about card templates. - -Long press in a text entry field to add a cloze deletion around the selected text, or an empty cloze deletion if there is no selected text. - -When you've finished typing in the content of a note, tap the tick icon in the app bar at the top to add it to -your collection. Alternatively, if you want to go back to what you were doing without saving, you can tap the app icon, or -use the hardware back button. - -[[noteFormattingToolbar]] -=== Note Formatting Toolbar - -The note formatting toolbar contains basic text formatting buttons (Bold, Italic, Underline, Horizontal Line, Insert Title, Change Font Size, <> and Insert Cloze Deletion). - -It also allows the addition of user-defined toolbar buttons using HTML. HTML is a powerful language allowing nearly endless customization of your cards. https://github.com/ankidroid/Anki-Android/wiki/Note-Editor-Toolbar-HTML-Samples[Our wiki] contains common code samples to get you started. - -A user-defined toolbar button can be removed by long pressing the button and selecting "Delete". - -[[editingNotes]] -== Edit Note Screen -The edit note screen can be opened by choosing edit while reviewing, or by opening a card in the browser. -The edit screen is similar to the add new note screen mentioned above, with some key -differences: - - - * Changing the deck operates on the selected card (which is underlined in the "Cards" box). - If a note type is chosen which has more than one card, only the currently selected card will be moved to the new deck. - - * Changing the "Type" dropdown selector changes to the note type edit mode. In this mode, editing the content of the note (i.e. deck, fields, etc) is disabled, - and if a custom note type with more than two fields is being used, additional buttons will appear which let you control the mapping of the fields to the new note type. - -If a note type is selected which has less cards than the original note type, only the first n cards will be kept. For example changing from "Basic (and reversed card)" to "Basic" - will lead to only the first card being kept. To warn you of this, the text in the "Cards" box will appear red, and a confirmation dialog will be shown before the note is saved. - - Hint: to change the type for multiple notes in one go, or to customize the mapping between cards, use the "Change note type" option in the browser on Anki Desktop. - -There are also several advanced options available in the main menu: - -Add note :: Create a new empty note -Copy card :: Copy the current note to a new editable note -Reset progress :: Move the card to the end of the new card queue. The current state of the card is cleared, but not its revision history. -Reschedule :: Allows you to reschedule as a review card on a given date. This is useful if you have imported already-learnt material, -and you want to start it off with higher initial intervals. - -[[browser]] -== Finding/Searching/Browsing -You can search for or browse cards by tapping the "Card browser" button from the <>. - -++++++++++ - -++++++++++ - -The browser screen starts by displaying all the cards in the currently selected deck. You can search for cards in the selected deck -by tapping the magnifying glass icon in the top. You can change the selected deck (or change to all decks) by choosing the deck from the -dropdown list on the top left. - -By default, the first column in the browser gives the text which will be shown on the question (i.e. front side) of the flashcard, and the second column shows the text from the answer (i.e. the back side) of the flashcard. - -The first column can also be configured to show the https://docs.ankiweb.net/editing.html#customizing-fields["sort field"] for a more compact display. The second column can be configured -to show many different parameters by tapping the drop down menu in the column heading. - -Note that the content of the columns is dynamically calculated as your scroll through the list of the cards. - -From the search results, you can tap on a card to edit it (see the <> above), or long-tapping on it will show a menu allowing you to -perform the following actions: - -Mark / unmark note :: Add / remove the "marked" tag from the note. Cards with a marked note are highlighted in purple. -Flag card :: Change or remove the color coded "flag" on the card. Cards with a flag are highlighted in the flags color. -Suspend / unsuspend card :: Suspended cards are highlighted in yellow, and are not shown during review. -Delete note :: Delete the note of the currently selected card, and all cards belonging to that note. -This action cannot be undone without <>. -Preview :: Render the currently selected card so that you can see what it looks like in the reviewer. -Select multiple cards :: Long-tapping on a single card will select the single card. While that card is selected, if you long-tap on another card on your screen, then all of the cards between the first selected card and the last card will be selected. This allows for actions to be performed on multiple cards at once. - -=== Searching -AnkiDroid supports all the search strings that the desktop version of Anki -does, allowing you to perform quite complex searches. Some examples: - - tag:marked :: show cards that with the tag "marked" - is:due :: show only cards that are waiting for review - front:rabbit :: show only cards where the front field is exactly "rabbit" - flag:1 :: show only cards marked with a red flag - -For a full list of the possibilities, please see the section in the -https://docs.ankiweb.net/searching.html#searching[desktop manual]. - -Alternatively, some more commonly used filters (marked, suspended, and tagged cards) can be quickly applied without manually typing them by choosing them from the overflow menu. You can also save and recall common search queries from the menu. - -[[filtered]] -== Filtered Decks - -Anki is designed to optimize the learning process, so that you study the -minimum amount necessary to remember the majority of your cards. Once the -congratulations screen is reached, further study becomes a case of diminishing -returns: the amount of extra time spent going over the same cards again is -generally not worth the moderate increase in retention you'll see. - -That said, if you have a test looming, or simply want to pass some time, it's -possible to keep reviewing even after you are shown the congratulations message. - -A 'filtered deck' is a temporary deck that contains cards based on various -criteria, such as "forgotten today", "is tagged 'hard'", and so on. After -studying cards in a filtered deck, or when the filtered deck is deleted, the -cards are automatically returned to their original deck. - -The easiest way to create a filtered deck is by long clicking on a deck and choosing the "custom study" option. - -Advanced users can create a filtered deck manually, by choosing "Create filtered deck" from the overflow menu in the deck list screen. - -For further information on filtered decks, please see the link:++https://docs.ankiweb.net/filtered-decks.html#filtered-decks--cramming++[desktop documentation]. - -[[RTL]] -== Using Right-To-Left Languages with AnkiDroid -Anki and AnkiDroid have full support for RTL languages such as Arabic, Hebrew, and Persian. - -=== Editing Fields as RTL -Fields can be marked as RTL (currently possible only from Anki Desktop) for RTL editing. When a field is marked as RTL, then the text is right-aligned in editing fields and punctuation is correctly displayed at the end (left) of sentences. Text that contains blocks of LTR characters will be properly displayed as well, with the beginning of the sentence appearing to the right of the LTR block and the end of the sentence being displayed to the left of the LTR block. - -Directionality is especially important for editing and creating RTL cloze deletions as the cloze format includes both neutral and LTR markup characters. Therefore it is recommended to use a separate note type for LTR cloze deletions and RTL cloze deletions. - -=== Displaying Fields as RTL during study -To display a field as RTL, with proper right-alignment and directionality (punctuation at left of sentences, proper flow around LTR blocks), the field should be wrapped in a div or span element with the RTL directionality specified: - -
- -[[AnkiDesktop]] -== Using Anki Desktop with AnkiDroid -Anki has a free cloud synchronization service called AnkiWeb that makes it -easy to keep your card decks in sync between mobile devices and your computer. -If you cannot use sync for some reason, it's also possible to use USB, though this method is more laborious. - -Note that AnkiDroid is not affiliated with Anki Desktop or AnkiWeb. AnkiDroid is based on Anki Desktop but it is developed by an entirely separate community of volunteers. - -++++++++++ - -++++++++++ - -=== Via Cloud Sync -Before you can use AnkiWeb, you'll first need to create an account by visiting https://ankiweb.net and clicking the *Sign Up* button. If you have used AnkiWeb in the past, you can skip this step. After signing up, see the corresponding instructions below, depending on whether you are trying to get your existing decks into AnkiDroid or out of AnkiDroid. - -==== Sync existing decks into a new AnkiDroid install -In this scenario you have some existing Anki decks that you want to copy into a new install of AnkiDroid by syncing with AnkiWeb. Open the Anki client with your existing decks (usually this would be Anki desktop, but it could also mean a version of AnkiDroid you have been using on another device), and click the synchronization button (which has two arrows in a circle) at the top right of the deck list. - -If you have never used AnkiWeb before you will need to enter your credentials if prompted, and -then press the "Upload to AnkiWeb" button to confirm overwriting the empty collection on AnkiWeb with your existing decks in Anki. Anki will upload all your cards, images and audio to AnkiWeb. If you have a lot of media, this may take some time. - -Once the synchronization has completed, open AnkiDroid in the device that you are trying to copy the existing decks into, and tap the *Sync* button in the app bar at the top of the main <>. -After entering your AnkiWeb credentials, AnkiDroid will download all your cards and media, and remember your login information for next time. - -Note that if you have any existing material in AnkiDroid before attempting to sync, you may be shown a message -asking you to choose to either download from AnkiWeb, or upload to AnkiWeb. If you are happy to lose the cards -in AnkiDroid then simply choose *Download*. If you need to merge the existing cards with AnkiDroid then you should see the -<> section before continuing. - -After the first synchronization has completed, you can click the sync button -again any time you wish to synchronize your changes to the cloud. Only changes -made since the previous sync will be sent, so subsequent syncs are a lot -faster. - -If you add some new cards on the desktop computer and want to sync them to -AnkiDroid, you'd repeat the same basic process: sync on desktop (or close the -program, as it syncs automatically on close by default), and then tap the sync -button on AnkiDroid. - -==== Sync from AnkiDroid to Computer -The process of syncing from AnkiDroid to computer is essentially the same as syncing from computer to -AnkiDroid, but in reverse. - -From the <>, tap the sync button in the top right (it has two arrows -in a circle). If it's your first time using AnkiWeb, you may need to -enter your login credentials, and then press the "upload" button to upload your AnkiDroid collection -to AnkiWeb. - -Once the synchronization has completed, open Anki Desktop on your computer and press the sync button there -(with two arrows in a circle), and Anki will download your collection. - -[[AnkiWebConflicts]] -==== Dealing with merge conflicts on AnkiWeb -Although it should not happen often, occasionally you may end up in the position where your cards on AnkiDroid can -not be automatically merged with the cards on AnkiWeb. In this case it's necessary to choose to either upload to or download from -AnkiWeb, which would overwrite any changes on the other side. - -If you have new cards on both sides which you want to keep, -before syncing you can <> for each deck containing new cards from AnkiDroid, then when you do the sync -choose "download" to download from AnkiWeb. After the synchronization has completed, you can import the decks you previously exported from AnkiDroid, -as per the <>. - -=== Via USB - -If you don't have regular internet access, it's still possible to copy decks -back and forth to your device, by using USB. - -The USB method works by importing or exporting all your decks at once. -This means that unlike syncing via AnkiWeb, you can't make changes from -two locations at once and then merge them. Instead, if you wish to add cards -on the desktop, you need to make sure you export the latest version of your -collection from your mobile device first, or you'll end up losing any reviews -done on the mobile device. - -Thus the workflow you would typically use is to export your collection from -your mobile device and import it into the desktop, make modifications on the -desktop, and then export your collection and import it back into your mobile -device. - -AnkiDroid can't directly import text files. If you wish to do that, you'll -need to do that with the desktop program, and then import your collection into -AnkiDroid. - -==== Copy all decks from Anki Desktop to AnkiDroid via USB - -On your computer: - - . Open the desktop program. - . Choose File>Export from the menu. - - . Click the 'Export...' button. Make sure to leave "all decks" selected, as - it's not possible to import individual decks into AnkiDroid. "Include - scheduling information" must also remain checked. - . Anki will automatically create a collection.apkg on your desktop. If the - file is named something else, please see the previous step again. - . Connect your Android device to your computer via the USB cable. - . Open the file explorer on your computer and view the contents of your Android device. - . Locate the AnkiDroid folder. - . Drag the collection.apkg file from your desktop into this AnkiDroid folder. - -Then in AnkiDroid: - - . From the main decks screen, tap "Import file" from the menu - . Tap on "Collection" and then confirm - -Once complete, the decks on your device will have been replaced with the decks from your desktop. See the section on -<> for more help with importing. - -==== Copy all decks from AnkiDroid to Anki Desktop via USB - -The process to copy your decks from AnkiDroid to Anki Desktop is essentially the same as above, but in reverse. - - . Start with your device disconnected from USB - . Choose "Export collection" from the main menu in the Deck Screen - . Ensure "Include scheduling information" remains checked and press *OK* - . Connect device to computer using USB - . Copy the "collection.apkg" from the path specified in the message to the desktop on your computer - . Double click on the file to import into Anki Desktop - -See the <> below for more detailed information on exporting from AnkiDroid. - -[[importing]] -== Importing Anki Files -You can import Anki files (with .apkg file format) directly into AnkiDroid. Other file formats cannot be imported directly into AnkiDroid, however -flashcards from most other applications can be imported into Anki Desktop on your computer, which can then be <>. -See the https://docs.ankiweb.net/importing.html#importing[importing section of the Anki Desktop manual] for help on importing into Anki Desktop. - -As in Anki Desktop, AnkiDroid distinguishes between https://docs.ankiweb.net/exporting.html#exporting[the two types of .apkg files] -("collection package" and "deck package") based on the filename. Collection packages have the name "collection.colpkg", and when imported will -completely _replace all contents_ in AnkiDroid. Any apkg file which is _*not*_ named something that ends in ".colpkg" will be treated as a deck package, -which will be _merged with any existing content_ when imported into to AnkiDroid. - -You can import .apkg Anki collection files into AnkiDroid either by opening them using the standard Android system, or by manually -importing them from within AnkiDroid: - -=== Open the file using Android -Apkg files are automatically associated with AnkiDroid, so for example if you open a .apkg email attachment which you sent to yourself, then -AnkiDroid will automatically open the file and confirm if you want to import it. Simply click OK and the apkg file will be imported. - -=== Import the file manually in AnkiDroid -You can also manually import .apkg files as follows: - - * Connect your device to your computer using USB - * Copy the .apkg from your computer to the AnkiDroid folder on your device - * Open AnkiDroid on your device - * From the main menu in the deck list, choose *Import* - * Choose the apkg file you just copied to your device when prompted - * Tap OK - -== Importing Anki Databases (.anki2) - -AnkiDroid does not support directly importing Anki database (`.anki2`) files. A database import will replace your collection with the contents the provided file. If you want to perform a full replacement, you should import a `collection[.apkg/.colpkg]` created in the app with the export function. - -=== Importing anki2 files manually - -This is not officially supported, but `.anki2` files can manually be imported if needed, in cases of troubleshooting for example: - -* Create a new folder on your Android file system -* Obtain the full path to the folder as provided by your file manager, this will typically appear as: `/storage/emulated/0/` -* Place the `.anki2` file in the newly created folder -* Rename the file to `collection.anki2` -* (If applicable) Temporarily log out of your AnkiWeb account: `Settings - AnkiDroid - AnkiWeb account` -* Open `Settings - Advanced - AnkiDroid Directory` and set the AnkiDroid Directory to the newly created folder. - -[[exporting]] -== Exporting Anki Files -AnkiDroid can export your flashcards in the .apkg Anki file format so that you can import them into Anki Desktop, or share them with other people. -As in Anki Desktop, you can either export a https://docs.ankiweb.net/exporting.html#packaged-decks[collection package or deck package], depending -on what you are trying to achieve. - -There are two export options available: "include scheduling information" and "include media". Generally the default options are sufficient, -if you choose not to include scheduling information, Anki will assume that you are sharing the deck with other people, -and will remove marked and leech tags so that they will have a clean copy of it. - -=== Exporting collection package -When exporting for use in Anki Desktop, you generally want to https://docs.ankiweb.net/exporting.html#collection-colpkg[export your entire collection], including all your review history etc. - -From the main menu in the decks screen: - - . Tap the *Export* item in the menu. - . Tap *OK* using default options - . Tap *OK* again to email the exported collection.apkg file to yourself, or alternatively you can manually copy to your computer using USB - -To import the file on your computer: - - . Save the file "collection.apkg" to your desktop - . Double-click on the file to start Anki. - . Confirm you wish to replace, so that the deck from your mobile device - overwrites the old data on your desktop. - . After importing, you can delete the apkg file on your desktop if you wish. - -=== Exporting deck package -If you want to share a deck in AnkiDroid with another user, you can export a deck package. - -From the main menu in the decks screen: - - . Long tap on the deck you wish to export - . Tap *Export* - . Tap *OK* using the default options - . Tap *OK* again to email the exported apkg to another user - - -[[backups]] -== Automatic Backups - -AnkiDroid will automatically create backups of your collection for you. The backups include all your cards and statistics, but do not include -sounds or images. - -The backup is taken in the background when you first start the app. A backup will only happen if more than 5 hours has elapsed since the last time a backup was created. -By default, AnkiDroid will store the last 8 backups; this number can be changed in the main settings. - -You can restore a backup by choosing the *restore from backup* option from the main menu of the <>. - -[[settings]] -== Preferences - -The preferences screen can be accessed by opening the navigation drawer, and choosing "Settings". - It allows you to customize various application settings and how AnkiDroid appears. - -The Preferences screen is divided up into different sections, which are -covered below. - -=== AnkiDroid -These are the general settings which affect the whole app: - -AnkiWeb account:: Change the account used for syncing with the cloud. For more information on syncing, please see <>. - -Fetch media on sync:: By default, AnkiDroid will sync sounds and images as well as your cards and review history. - If you disable this option, sounds and images will not be downloaded from or uploaded to the sync server by AnkiDroid. - -Automatic synchronization:: Enable this option if you want AnkiDroid to sync every time you open and close the app. There is a limit of once every ten minutes for this behavior. Once a sync begins you can cancel it by pressing your device's back button, however it can take some time for the cancellation to take effect. - -+ -Users that want more fine-grained control over when sync occurred might like to use a 3rd party app like Tasker to automate synchronization. See the https://github.com/ankidroid/Anki-Android/wiki/AnkiDroid-API#sync-intent[API documentation] for more information on this. - -Deck for new cards:: The default of "Use current deck" means that Anki saves the last-used note type for each deck -and selects it again then next time you choose the deck (and, in addition, will start with the current deck selected when choosing -Add from anywhere). The other option, "Decide by note type," saves the last-used deck for each note type -(and opens the add window to the last-used note type when you choose Add). This may be more convenient if you always use a single note -type for each deck. - -Language:: Change the language. Note: AnkiDroid translations are contributed by volunteers. If you find missing or incorrect translations, -feel free to contribute to the translation project. More details can be found on the https://github.com/ankidroid/Anki-Android/wiki/Contributing#translate-ankidroid[AnkiDroid Wiki]. - -Error reporting mode:: Control whether or not AnkiDroid asks your permission before sending error reports to our error reporting system -when AnkiDroid crashes. You can also disable the reporting feature entirely if you wish. - -==== Notifications -This subsection allows you configure when and how AnkiDroid shows alerts in the Android notification bar. - -Notify when :: *Never notify* will disable all notifications from AnkiDroid. *Pending messages available* will only show important status updates like when a sync completed. *More than n cards due* will show a notification when you have more than n cards due (requires the widget to be enabled). - -Vibrate:: Checking this will make your device vibrate when showing a notification - -Blink light:: Checking this will make your device light blink when an unread notification exists (if your device has a notification LED) - - -=== Reviewing - -The reviewing screen allows you to customize how AnkiDroid behaves when you're -reviewing cards. Note that only the reviewing settings which are applied to *all decks* are shown here. There are more settings related -to reviewing which are *deck specific*. These deck specific settings are located in *Deck options*. - -New card position :: Controls when new cards are shown: either mixed with, after, or before all reviews. - -Start of next day :: Controls when AnkiDroid should start showing the next day's cards. -The default setting of 4AM ensures that if you're studying around midnight, you won't have two days worth of cards shown to you in one -session. If you stay up very late or wake up very early, you may want to adjust this to a time you're usually sleeping. - -Learn ahead limit :: The Learn ahead limit tells AnkiDroid how to behave when there is nothing left to study in the current deck -but cards in learning. The default setting of 20 minutes tells AnkiDroid that cards should be shown early if they are due to be shown in -less than 20 minutes and there's nothing else to do. If you set this to 0, Anki will always wait the full period, showing the congratulations -screen until the remaining cards are ready to be reviewed. - -Timebox limit:: Timeboxing is a technique to help you focus by dividing a longer activity (such as a 30 minute study session) into smaller -blocks. If you set the timebox time limit to a non-zero number of minutes, AnkiDroid will periodically show a message saying you how many -cards you've managed to study during the prescribed time limit. - -==== Display -This subsection relates to the way cards are displayed during reviewing - -Keep screen on :: Ignore the automatic screen timeout setting in Android to always keep the screen on. - -Fullscreen mode :: Switches to an immersive fullscreen mode so that you can use more of the screen. You can choose between "Hide the system bars" which will hide the system status bar, action bar, and bottom navigation buttons. Alternatively you can choose "Hide the system bars and answer buttons", which will hide everything except for the actual card content itself. You can temporarily exit fullscreen mode by swiping inwards (i.e. down or up) from the system bars. - -+ -Note that immersive fullscreen mode is only supported on Android 4.4+ - -Center align :: By default AnkiDroid tries to show cards exactly as they are shown on Anki Desktop, however if you prefer your cards -to be center aligned vertically in AnkiDroid then you can enable this feature. - -Show button time :: By default, the answer buttons will display the time a card will -next be shown. If you disable this option, the times will not appear, and only labels like "Again", "Good" and -"Easy" will be shown. - -Card zoom :: Here you can increase the zoom level of the card content (excluding images). You can use this option if you want to increase the font size for all cards. - -Image zoom :: Here you can increase the zoom level of any images embedded in your cards. - -Answer button size :: If you find it difficult to press the answer button, you can use this setting to make it bigger. - -Show remaining :: Disabling this allows you to hide the card count in the top left of the screen. - -==== Whiteboard -This subsection controls the whiteboard in the reviewer. -Note: the whiteboard must be enabled in each deck individually from the menu in the study screen. - -Stroke width :: Control the stroke width of the whiteboard. Reducing the stroke width may allow you to draw with more detail. - -Black strokes :: Use black strokes instead of color, which may reduce memory usage. Note: this setting doesn't apply when night mode is enabled. - -==== Automatic display answer -The automatic display answer feature allows you to have the answer shown automatically after some timeout period. You can also have the next -question shown automatically; in this case the card is assumed to be failed (i.e. the again button is automatically chosen) - -Time to show answer :: Time to wait until answer is automatically shown - -Time to show next question :: Time to wait until next question is automatically shown. - -=== Fonts -In this screen you can change the font used by AnkiDroid, and some scaling options related to fonts. -See the <> section for more information about using custom fonts. - -Default font :: Choose the default font used by the AnkiDroid reviewer. You can add fonts to this list by copying them to the "fonts" folder. - -Default font applicability :: The default setting is to only use the default font when no font has been specified in the card styling -via Anki Desktop, however you can also force the default font to be applied, ignoring any font specification in the card styling. - -Browser and editor font :: The font to be used by the browser and editor - -Card browser font scaling :: Lets you change the font size used in the card browser. - -[[gestures]] -=== Gestures -AnkiDroid allows you to customize the interface, so that actions you perform -frequently can be accomplished quickly by using tap and swipe gestures. - -==== Actions -The following gestures can be used: - - * Swipe up - * Swipe down - * Swipe left - * Swipe right - * Double touch - * Touch top - * Touch bottom - * Touch left - * Tough right - -The following actions are available for each gesture: - -No action :: Don't do anything. Useful if you want to disable certain swipes, tap zones and so on. - -Answer button 1 :: When the answer screen is shown, choose the red -button, indicating you wish to review the card again soon. This is useful when -you forgot a card or wish to review it more frequently. -When the question is shown, this action (and all other answer actions below) will simply show the answer. - -Answer button 2 :: When the answer screen is shown, choose the second button from the left, -generally indicating you found the card hard to remember. - -Answer button 3 :: When the answer screen is shown, choose the third button from the left. - -Answer button 4 :: When the answer screen is shown, choose the fourth button from the left (when applicable). - -Undo :: Undoes the last action. - -Edit card :: Edits the current card. - -Mark :: Adds a tag called "Marked" the current note, so it can be easily found in a search. - -Lookup expression :: When the lookup feature is enabled (in advanced settings), lookup an expression -in the selected dictionary. Note: the expression needs to be copied to the clipboard before this action will work. - -Bury card :: Hides the current card from review. - -Suspend card :: Prevent current card from being shown during review until you unsuspend it via the card browser. - -Delete note :: Deletes the currently shown note and all of its cards. - -Play media :: Replay any audio on the card. - -Abort learning :: Stop reviewing and go back to the deck overview page. - -Bury note :: Bury the current note (i.e. hide it until the next day). - -Suspend note :: Suspend the current note (i.e. hide it until you unsuspend it). - -Toggle Red Flag :: Enables the red flag, unless the flag is already red, in which case the flag is disabled. - -Toggle Orange Flag :: Enables the orange flag, unless the flag is already orange, in which case the flag is disabled. - -Toggle Green Flag :: Enables the green flag, unless the flag is already green, in which case the flag is disabled. - -Toggle Blue Flag :: Enables the blue flag, unless the flag is already blue, in which case the flag is disabled. - -Remove Flag :: Removes the flag from the card. - -=== Advanced -Some less common features for advanced users are shown here - -Collection path :: Change the location where AnkiDroid's data is stored (not recommended) - -Force full sync :: -Tap this item to force a full upload or download on the next sync (for example, because you accidentally deleted a deck on one side and want to restore the deck rather than having its deletion synchronized). - -Advanced Statistics :: -Take into account the effect of future reviews in the 'Forecast' graph. More info <>. - -==== Workarounds -Type answer into the card :: -If you have set up your cards to ask you to type in the answer (as explained in https://docs.ankiweb.net/templates/intro.html#card-templates[this section of the desktop manual]), AnkiDroid will display a keyboard on such cards and allow you to check your answer. - -+ --- -In order to improve user experience when working with the whiteboard and gestures, we use a typing box separate from the card, which is inconsistent with the way the feature works on Anki Desktop. - -For full consistency with Anki Desktop, you can enable this option which allows you to save screen area, and choose an appropriate font (e.g. Japanese vs Chinese) for the input box. --- - -Input Workaround :: -Some older devices couldn't gain focus into the text input box for typed-answer fields, so this was added (Hidden for API > 14). - -Longclick Workaround :: -Some older devices couldn't detect longclick for initiating selecting/copying of text, so this was added (Hidden for API > 10). - -Fix for Hebrew Vowels :: -Some older devices couldn't render Hebrew text, so this feature was added which allows the user to download and install a Hebrew font which is known to work (Hidden for API > 15). - -Text to Speech :: -Enable this option to have Android read out all the text on your flashcards using the default text to speech engine. Google's built-in TTS engine should work; 3rd party TTS engines may or may not. -AnkiDroid will ask you to select the language for the front and back of your cards once for each deck on the first time you review a card in that deck. -To change the language or disable TTS for a given deck after making your initial choice, you'll need to use the "reset languages" option described below and reconfigure for each deck. - -+ --- -Alternatively, if you want only fragments of cards to be read aloud, or if you want to set the TTS language for multiple decks at once, you can insert `` tags into <>. For example, with the following template for the back of the card - -[subs=+quotes] -.... -{{FrontSide}} - -
- -**{{EnglishTranslation}}**** -

-{{Example}} -.... - -only the `EnglishTranslation` field will be read aloud in a British English voice; the `Example` field, lying outside the `` tag, won't be read aloud. Every `` tag needs to have the following two attributes: - - * `service`: should be set to `"android"`, otherwise the contents of the `` tag won't be read aloud; - * `voice`: used to select the TTS language; should be a https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes[two- or three- letter language code], optionally followed by an underscore and a https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2[two-letter country or region code]. A frequently updated list of languages supported by the Google TTS engine can be found on its https://en.wikipedia.org/wiki/Google_Text-to-Speech[Wikipedia page]. - -To make both AnkiDroid and the https://ankiatts.appspot.com/[AwesomeTTS] plugin to the desktop application use a TTS engine to read aloud certain card fragments, put the `` tag inside the `` tag recognised by AwesomeTTS, or vice versa. An example: - -.... - - - {{EnglishTranslation}} - - -.... - -AnkiDroid automatically ignores `` tags selecting an unknown TTS service. In contrast, AwesomeTTS may display a warning message on encountering the `` tag; to suppress it, uncheck the two _Show errors_ checkboxes on the _Playback_ tab of the _AwesomeTTS: Configuration_ dialog in the desktop application. - -_This feature may be removed in the future in favor of a separately downloadable plugin_ --- - -Lookup Dictionary :: -Dictionary to use to lookup words copied to the clipboard in the reviewer. After setting up a dictionary, do the following to perform the lookup: - -+ --- - * Longclick on the text you want to copy in the reviewer - * After selecting the word you want to copy, press the "copy" icon in the app bar at the top of the screen - * Tap once anywhere on the flashcard - * A magnifying glass icon should appear, which performs the lookup when clicked - -Alternatively, the lookup action can be performed via a gesture. - -_This feature will likely be removed in the future in favor of a plugin_ --- - -Reset Languages :: -Useful for resetting the TTS language - -eReader (up/down buttons) :: -Support for eReader hardware buttons (see https://github.com/ankidroid/Anki-Android/issues/1625[issue 1625]) - -+ -_This feature will likely be removed in the future in favor of a plugin_ - -eReader Double Scrolling :: -Double the scrolling distance when using the eReader hardware buttons - - -== Advanced Features -[[mathjax]] -=== MathJax Support -Mathjax is a modern typesetting library for math and chemistry. AnkiDroid supports Mathjax cards out of the box. Mathjax is configured to expect TeX formatting, with `\(` and `\)` delimiting inline equations and `\[` and `\]` for display equations. - -To try it out, enter the following into a field: - -... -\(\sqrt{x}\) -... - -and preview the card. - -For more details, see https://docs.ankiweb.net/math.html#mathjax[Mathjax Support] in the Anki Manual. - -https://www.reddit.com/r/Anki/comments/ar7lxd/how_to_load_mathjax_color_extension_on_anki/egm6u5j/[Previous workarounds] are no longer necessary as of AnkiDroid 2.9. - -[[reverseCards]] -=== Reverse Cards -The Anki system has https://docs.ankiweb.net/getting-started.html#note-types[built-in note types which allow you to review cards in both directions]. -When <> in AnkiDroid, you should choose one of these note types, such as "Basic (and reversed card)", -which will automatically generate a reverse card for you. - -++++++++++ - -++++++++++ - -If you used the wrong note type when adding your material, you can change the note type via the <>, -or you can change the note type for multiple cards at once using the browser in Anki Desktop. -To do this, follow the instructions in the <>, then in Anki Desktop open the browser, -select the cards you want to change, then choose *Change note type* from the menu. - -Alternatively, if your cards are using a custom card layout which doesn't include a reverse card, you can edit the note type to include a reverse card by following the instructions in the https://docs.ankiweb.net/templates/generation.html#reverse-cards[reverse cards section] of the Anki Desktop user manual. While less convenient than using Anki Desktop, it is possible to edit the note type from directly within AnkiDroid as well; see the <> for more on this. - -[[customFonts]] -=== Custom Fonts - -AnkiDroid allows you to use non-system fonts on your cards. To set them up properly, -it is strongly recommended to use the official method that is used by Anki Desktop. Please see -https://docs.ankiweb.net/templates/styling.html#installing-fonts[the corresponding section in the desktop -manual] for more information. - -Alternatively, you can create a new subfolder "fonts" in the main AnkiDroid directory (i.e. the folder which contains the "backups" subfolder, specified under Settings > Advanced > AnkiDroid directory), copy a compatible font file (i.e. .ttf) there, -and then set this as the default font under Settings > Fonts > Default font. -Note: this method will change the default font for *all* of your cards, whereas the official method can be more specific. Also, if you sync with AnkiWeb, using this method will lead to cards being displayed differently on different devices. - -Only fonts in the ttf format are officially supported in Anki/AnkiDroid; -the https://www.google.com/get/noto/#/[Google Noto] font set is highly recommended for all languages, -and some other free fonts can be found https://github.com/ankidroid/Anki-Android/wiki/Freely-distributable-fonts[here]. - -Please note that AnkiDroid has to load the entire font into memory in order -to use it, and fonts for Asian languages can be quite large. If you have an -older device and notice AnkiDroid crashing frequently after installing a -font, you may have exceeded your device's memory limits. For Google Noto, -it's not recommended to use the combined CJK font, rather get the individual languages https://github.com/googlei18n/noto-cjk[separately from here]. - -*Note 1*: If you have "Fetch media on sync" disabled, you may need to manually copy the font file from Anki Desktop to your AnkiDroid/collection.media folder. - -*Note 2*: If you can't get your font to work after following the steps in here and the Anki Desktop manual, please refer to the FAQ for https://github.com/ankidroid/Anki-Android/wiki/FAQ#i-followed-the-instructions-in-the-manual-but-i-still-cant-get-my-custom-font-to-work[detailed steps on how to debug font issues]. - - -[[customizingCardLayout]] -=== Custom Card Layout -The layout of flashcards is completely customizable, although this is an advanced topic with a fairly steep learning curve, and you will probably find it a lot more convenient to do the customization with <>. - -The https://docs.ankiweb.net/templates/intro.html#card-templates[card templates section] of the Anki Desktop manual has detailed instructions on how to edit note types, and most of the actions discussed there are also available from AnkiDroid by tapping "cards" at the bottom of the note editor, or choosing the "manage note types" option in the deck picker. Since detailed information on customizing card layouts is available in the Anki desktop manual, it will not be repeated here. - -There is an https://github.com/ankidroid/Anki-Android/wiki/Advanced-formatting[advanced formatting page] on the AnkiDroid wiki with various hints on how you can get the most out of your card formatting, and we encourage you to read it, and edit it freely if you have any tips that you'd like to share with the community. - -[[typeInAnswer]] -=== Type in the answer feature - -AnkiDroid allows you to type in the correct answer and then compare it to the right answer. You have to set this up with Anki desktop, -as described in the https://docs.ankiweb.net/templates/fields.html#checking-your-answer[Anki Desktop manual]. - -Anki desktop replaces the “{{type:NN}}” field on -the front of a card with an input box in the card. On AnkiDroid it is replaced with a “......” prompt instead, and a text -input box is shown at the bottom. The comparison between typed text and -the correct text is shown on the answer side in place of the -“{{type:NN}}” field there, like on Anki desktop. - -The text input box and the soft keyboard can be hidden by ticking -“Disable typing in answer” in the preferences. - -Even with typing disabled, the correct answer is shown on the answer -side. This is done on purpose; otherwise the correct answer might not -be shown at all. - -To hide the comparison (e.g. because the correct answer is shown anyway), the HTML id -“typeans” can be used. Add “.mobile #typeans {display: none;}” to the -https://docs.ankiweb.net/templates/styling.html#card-styling[card styling] using Anki Desktop. - -The type answer prompt and the comparison have more classes that -can be used to change the way they are displayed. Some of these are -the same as on Anki Desktop, some are specific to AnkiDroid. - -The comparison uses three classes, typeGood, typeBad and typeMissed -to add green, red and gray background to the typing comparison. These -three classes are used on Anki desktop as well. - -The “......” prompt has the class “typePrompt”. - -When typing is set to off in the preferences, the class “typeOff” is -added to the prompt on the question side, and to the div element -containing the comparison on the answer side. This class can be used -to show the type prompt or to hide the typing comparison in -this case. - -[[advancedStatistics]] -=== Advanced Statistics - -If Advanced Statistics are enabled, it changes the 'Forecast' graph so that it shows the estimated number of reviews that will be due on a given day in the future taking into account future reviews, learning new cards and failing cards. The bars and the left axis show the number of cards due on each day if you study all cards each day, while the line and the right axis show the number of unseen (shown as 'learn'), young and mature cards your deck or collection will consist of if you study all cards each day. The forecast graph does count reviews that are currently overdue. It assumes that the overdue cards will be reviewed according to the 'maximum reviews/day' deck option. - -Advanced Statistics can be enabled in Settings -> Advanced -> Advanced Statistics (in plugin section). - -The outcome of future reviewing, learning or failing cards affects reviews after that future review. To take this into account, the probability of each outcome is computed from the review log. Then the outcome is randomly chosen, such that an outcome which is more likely according to the review log is more likely to be chosen than an outcome which is less likely according to the review log. The settings all affect how the effect of the outcome of future reviews on subsequent reviews is taken into account. - -Compute first n days, simulate remainder :: -If this setting is set to a number greater than 0, instead of randomly choosing an outcome, each possible outcome is taken into account in the simulation, together with its probability. The probability is taken into account for the graph and for future reviews in which it results, which also affect the graph. -One review has a couple of possible outcomes (say 4), which all result in a review. That review also has a couple of possible outcomes and so on. If many reviews are simulated this way, many reviews (4 x 4 x 4 x ... ) have to be taken into account which increases the time it takes to compose the graph. -Therefore, for reviews later than n days from now are simulated by randomly choosing an outcome. - -+ -In summary, higher n gives a more accurate graph, but it takes more time to compose the graph. - -Precision of computation :: - -Reviews which occur with a probability smaller than 100% minus the configured precision of the computation are simulated by randomly choosing an outcome rather than taking into account each possible outcome. This setting is only applicable if the first n days are computed. -If Advanced Statistics are disabled, the 'Forecast' graph shows the estimated number of reviews that will be due on a given day in the future if you do not review cards, learn no new cards and fail no cards. - -+ -In summary, higher precision gives a more accurate graph, but it takes more time to compose the graph. - -Number of iterations of the simulation :: -Composes the graph several times and then displays the average of these graphs. -Each time the graph is composed, another outcome might be randomly chosen. If we average many outcomes which are randomly chosen taking into account the probabilities from the review log, the average outcome will likely be close to the average of the probabilities from the review log. -If we average many graphs, the average graph will likely be close to the graph which is generated by taking into account all possible outcomes. -If the number of graphs which are averaged is not too high, it will be faster than taking into account all possible outcomes. - -+ -In summary, a higher number of iterations gives a more accurate graph, but it takes more time to compose the graph. - -[[reminders]] -=== Reminders -AnkiDroid can remind you to devote some time to reviewing cards every day at a specific time via Android's notification framework. -You can configure reminders for each options group independently. -To configure a notification go to Deck options > Reminders, then tick the checkbox and select the time you want to be notified at. -To stop receiving notifications go to Deck options > Reminders and unmark the checkbox. - -Notifications only work for top level decks. Please let us know if you want us to add notifications for subdecks too. - -[[setlanguagehint]] -=== Automatic Language Selection -AnkiDroid has an in Automatic Language Selection feature in the Note Editor starting with AnkiDroid 2.13. This feature allows you to define a default language to be used in your keyboard for a field in a note type. - - -For example, if you have Russian and English note fields, and your keyboard supports the setImeHintLocales Android API, the keyboard layout will switch to Russian in the first field and back to English in the second automatically when the fields get focus. https://youtu.be/JrxDjTrRhBE[Checkout video reference for demonstration] - -[[keyboardShortcuts]] -== Keyboard Shortcuts - -=== Home Screen - -|=== -|Shortcut |Purpose - -|kbd:[A] -|Add Note - -|kbd:[B] -|Card Browser - -|kbd:[Y] -|Sync -|=== - -=== Reviewer - -|=== -|Shortcut |Purpose - -|kbd:[1],kbd:[2],kbd:[3],kbd:[4] -|Press the nth answer button - -|Gamepad Y -|Flip Card/Press the first answer button - -|Gamepad X -|Flip Card/Press the second answer button - -|Gamepad B -|Flip Card/Press the third answer button - -|Gamepad A -|Flip Card/Press the fourth answer button - -|kbd:[Space],kbd:[Enter] -|Flip Card/Answer Good - -|kbd:[e] -|Edit Note - -|kbd:[*] -|Mark Note - -|kbd:[-] -|Bury Card - -|kbd:[=] -|Bury Note - -|kbd:[@] -|Suspend Card - -|kbd:[!] -|Suspend Note - -|kbd:[r],kbd:[F5] -|Replay Media - -|kbd:[z] -|Undo -|=== - -=== Note Editor -|=== -|Shortcut |Purpose - -|kbd:[Ctrl+Enter] -|Save Note - -|kbd:[D] -|Select Deck - -|kbd:[L] -|Card Template Editor - -|kbd:[N] -|Select Note Type - -|kbd:[T] -|Edit Tags - -|kbd:[Ctrl+P] -|Preview Note - -|kbd:[Ctrl+B] -|Bold - -|kbd:[Ctrl+I] -|Italic - -|kbd:[Ctrl+U] -|Underline - -|kbd:[Ctrl+R] -|Insert Horizontal Rule - -|kbd:[Ctrl+H] -|Insert Title - -|kbd:[Ctrl+F] -|Change Font Size - -|kbd:[Ctrl+M] -|Insert MathJax Equation - -|kbd:[Ctrl+Shift+C] -|Insert New Cloze Deletion - -|kbd:[Ctrl+Alt+Shift+C] -|Insert Cloze Deletion using existing number - -|kbd:[Ctrl+1..0] -|Insert User-Defined HTML -|=== - -=== Card Browser -|=== -|Shortcut |Purpose - -|kbd:[Ctrl+A] -|Select All - -|kbd:[Ctrl+E] -|Edit Note - -|kbd:[Ctrl+D] -|Change Deck - -|kbd:[Ctrl+K] -|Mark Note - -|kbd:[Ctrl+Alt+R] -|Reschedule -|=== - - -=== Card Template Editor -|=== -|Shortcut |Purpose - -|kbd:[Ctrl+P] -|Preview Changed - -|=== - - - -[[betaTesting]] -== Beta testing -If you want to try out the latest features in AnkiDroid, you can sign up for the beta testing program as follows: - - . Visit the https://play.google.com/apps/testing/com.ichi2.anki[Google Play Beta page] - . Click *Become a beta tester* - -After following these steps, the latest beta version will automatically be installed by Google Play in the same way as ordinary updates. - - -Please submit any bugs you find in these development versions to the AnkiDroid issue tracker, as per the link:help.html[main help page]. - -If you wish to leave the testing program at any time, simply visit the https://play.google.com/apps/testing/com.ichi2.anki[Google Play Beta page] and click *Leave the test* - -[[alphaTesting]] -== Alpha testing -If you are more adventurous, you can also become an alpha tester, by joining the https://groups.google.com/forum/#!forum/ankidroidalphatesters[alpha testers group] -in addition to performing the above steps for beta testing. - -++++++++++ - -++++++++++ - -[[contributing]] -== Contributing to AnkiDroid -AnkiDroid is an open source project, and its development relies on contributions from volunteers. Here are some of the ways you can contribute to the AnkiDroid project: - -Get involved :: Rate the app, join the https://groups.google.com/forum/#!forum/anki-android[AnkiDroid forum] and answer questions for other users, submit bug reports, become a <>, etc. More detailed information on ways you can contribute as a non-developer can be found on the https://github.com/ankidroid/Anki-Android/wiki/Contributing[Wiki]. - -Translate :: Translations of AnkiDroid and this user manual are all contributed by users, and are greatly appreciated. -See the https://github.com/ankidroid/Anki-Android/wiki/Contributing#translate-ankidroid[translating] wiki page for detailed instructions on how to contribute translations. - -Develop :: The source code for AnkiDroid is available on our main https://github.com/ankidroid/Anki-Android[Github page], and bug fixes as well as new features are very welcome. -Before investing a lot of time on working on a new feature, you may like to ask on the forum first if it's likely to be merged into the main project, as not all features will be accepted. -If you are just getting started with Android programming, feel free to ask on the forum for some tips and/or tasks which are suitable for beginners. diff --git a/po/ar.po b/po/ar.po new file mode 100644 index 0000000..3b3cbf5 --- /dev/null +++ b/po/ar.po @@ -0,0 +1,6445 @@ +msgid "" +msgstr "" +"Project-Id-Version: ankidroiddocs\n" +"POT-Creation-Date: 2024-02-01T17:14:41Z\n" +"PO-Revision-Date: 2024-02-01 17:15\n" +"Last-Translator: \n" +"Language-Team: Arabic\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" +"X-Crowdin-Project: ankidroiddocs\n" +"X-Crowdin-Project-ID: 645072\n" +"X-Crowdin-Language: ar\n" +"X-Crowdin-File: messages.pot\n" +"X-Crowdin-File-ID: 2\n" + +#: src/SUMMARY.md:1 +msgid "Summary" +msgstr "" + +#: src/SUMMARY.md:3 src/intro.md:1 src/intro.md:1 +msgid "Introduction" +msgstr "" + +#: src/SUMMARY.md:4 src/getting-started.md:1 +msgid "Getting started" +msgstr "" + +#: src/SUMMARY.md:6 src/deck-picker.md:1 +msgid "The Deck List" +msgstr "" + +#: src/SUMMARY.md:8 src/drawer.md:1 +msgid "Navigation Drawer" +msgstr "" + +#: src/SUMMARY.md:10 src/deck-overview.md:1 +msgid "Deck Overview Screen" +msgstr "" + +#: src/SUMMARY.md:12 src/reviewer.md:1 +msgid "Study Screen" +msgstr "" + +#: src/SUMMARY.md:14 src/adding-notes.md:1 +msgid "Add Note Screen" +msgstr "" + +#: src/SUMMARY.md:16 src/editing-notes.md:1 +msgid "Edit Note Screen" +msgstr "" + +#: src/SUMMARY.md:18 src/browser.md:1 +msgid "Finding/Searching/Browsing" +msgstr "" + +#: src/SUMMARY.md:20 src/filtered-deck.md:1 +msgid "Filtered Decks" +msgstr "" + +#: src/SUMMARY.md:22 src/importing/importing-anki-files.md:1 +msgid "Importing Anki Files" +msgstr "" + +#: src/SUMMARY.md:23 src/importing/importing-anki-databases.md:1 +msgid "Importing Anki Databases (.anki2)" +msgstr "" + +#: src/SUMMARY.md:25 src/exporting.md:1 +msgid "Exporting Anki Files" +msgstr "" + +#: src/SUMMARY.md:27 src/backups.md:1 +msgid "Automatic Backups" +msgstr "" + +#: src/SUMMARY.md:29 src/settings.md:1 +msgid "Preferences" +msgstr "" + +#: src/SUMMARY.md:31 src/gestures.md:1 +msgid "Gestures" +msgstr "" + +#: src/SUMMARY.md:33 src/note-formatting-toolbar.md:1 +msgid "Note Formatting Toolbar" +msgstr "" + +#: src/SUMMARY.md:35 src/keyboard-shortcuts.md:1 +msgid "Keyboard Shortcuts" +msgstr "" + +#: src/SUMMARY.md:37 src/rtl.md:1 +msgid "Using Right-To-Left Languages with AnkiDroid" +msgstr "" + +#: src/SUMMARY.md:39 src/anki-desktop.md:1 +msgid "Using Anki Desktop with AnkiDroid" +msgstr "" + +#: src/SUMMARY.md:41 src/ankiweb-conflicts.md:1 +msgid "Dealing with merge conflicts on AnkiWeb" +msgstr "" + +#: src/SUMMARY.md:43 src/advanced-features/intro.md:1 +msgid "Advanced Features" +msgstr "" + +#: src/SUMMARY.md:44 src/advanced-features/mathjax.md:1 +msgid "MathJax Support" +msgstr "" + +#: src/SUMMARY.md:45 src/advanced-features/reverse-cards.md:1 +msgid "Reverse Cards" +msgstr "" + +#: src/SUMMARY.md:46 src/advanced-features/custom-fonts.md:1 +msgid "Custom Fonts" +msgstr "" + +#: src/SUMMARY.md:47 src/advanced-features/customizing-card-layout.md:1 +msgid "Custom Card Layout" +msgstr "" + +#: src/SUMMARY.md:48 src/advanced-features/type-in-answer.md:1 +msgid "Type in the answer feature" +msgstr "" + +#: src/SUMMARY.md:49 src/gestures.md:146 +#: src/advanced-features/advanced-statistics.md:1 +msgid "Advanced Statistics" +msgstr "" + +#: src/SUMMARY.md:50 src/advanced-features/reminders.md:1 +msgid "Reminders" +msgstr "" + +#: src/SUMMARY.md:51 src/advanced-features/set-language-hint.md:1 +msgid "Automatic Language Selection" +msgstr "" + +#: src/SUMMARY.md:54 +msgid "Help & Supports" +msgstr "" + +#: src/SUMMARY.md:55 src/beta-testing.md:1 +msgid "Beta testing" +msgstr "" + +#: src/SUMMARY.md:56 src/help.md:33 src/contributing.md:1 +msgid "Contributing to AnkiDroid" +msgstr "" + +#: src/SUMMARY.md:57 +msgid "Changelog" +msgstr "" + +#: src/SUMMARY.md:58 +msgid "Version 2.15" +msgstr "" + +#: src/SUMMARY.md:59 +msgid "Version 2.14" +msgstr "" + +#: src/SUMMARY.md:60 +msgid "Version 2.13" +msgstr "" + +#: src/SUMMARY.md:61 +msgid "Version 2.12" +msgstr "" + +#: src/SUMMARY.md:62 +msgid "Version 2.11" +msgstr "" + +#: src/SUMMARY.md:63 +msgid "Version 2.10" +msgstr "" + +#: src/SUMMARY.md:64 +msgid "Version 2.9" +msgstr "" + +#: src/SUMMARY.md:65 +msgid "Version 2.8" +msgstr "" + +#: src/SUMMARY.md:66 +msgid "Version 2.7" +msgstr "" + +#: src/SUMMARY.md:67 +msgid "Version 2.6" +msgstr "" + +#: src/SUMMARY.md:68 +msgid "Version 2.5" +msgstr "" + +#: src/SUMMARY.md:69 +msgid "Version 2.4" +msgstr "" + +#: src/SUMMARY.md:70 +msgid "Version 2.3" +msgstr "" + +#: src/SUMMARY.md:71 +msgid "Version 2.2" +msgstr "" + +#: src/SUMMARY.md:72 +msgid "Version 2.1" +msgstr "" + +#: src/SUMMARY.md:73 +msgid "Version 2.0" +msgstr "" + +#: src/SUMMARY.md:74 src/changelog/v0.1-to-1.1.3.md:1 +msgid "Version 0.1 to 1.1.3" +msgstr "" + +#: src/intro.md:3 src/intro.md:3 +msgid "Thank you for using AnkiDroid, the Android client for the popular [Anki](http://ankisrs.net) spaced repetition system. " +msgstr "" + +#: src/intro.md:5 src/intro.md:5 +msgid "Anki is spaced repetition technique which is simple but highly effective. It helps you memorize things by automatically repeating them across increasing intervals based on your responses with no need for you to keep track of what to study or when to study it. You create notes (or download shared decks) with content you need to memorize, and the scheduler will make sure you see the content when you need to." +msgstr "" + +#: src/intro.md:7 src/intro.md:7 +msgid "AnkiDroid is intended to be used in conjunction with Anki on your computer. While it is possible to function without it, some tasks are either only possible with, or a lot more efficient with Anki Desktop. Furthermore, it is **strongly recommended** to at least read [`Key Concepts`](https://docs.ankiweb.net/getting-started.html#key-concepts) section of the main Anki manual to understand the terminology used here." +msgstr "" + +#: src/intro.md:9 src/intro.md:9 +msgid "If this manual doesn't contain what you are looking for, please check the [AnkiDroid Wiki](https://github.com/ankidroid/Anki-Android/wiki) for a list of changes, instructions for submitting bug reports and feature requests, a list of frequently asked questions, and much more." +msgstr "" + +#: src/getting-started.md:2 +msgid "To start using AnkiDroid, we need to add some cards to study. From the main screen, tapping the big blue plus button will allow you to either add a new **note** (i.e. create new flashcards), download shared decks (decks that other people have created and shared online), or create new empty decks." +msgstr "" + +#: src/getting-started.md:4 +msgid "Please watch this 5 minute [tutorial video](https://www.youtube.com/watch?v=F2K1gOSdIZA), which gives an introduction to adding, downloading, and studying cards in AnkiDroid. More detailed information can be found in the sections below." +msgstr "" + +#: src/getting-started.md:6 +msgid "If you are an existing user of Anki Desktop wishing to import your decks from the computer, you might like to skip straight to the [using AnkiDroid with Anki Desktop](anki-desktop.md#using-anki-desktop-with-ankidroid) section." +msgstr "" + +#: src/deck-picker.md:3 +msgid "[Add button](#add-button)" +msgstr "" + +#: src/deck-picker.md:4 +msgid "[Add](#add)" +msgstr "" + +#: src/deck-picker.md:5 +msgid "[Get shared decks](#get-shared-decks)" +msgstr "" + +#: src/deck-picker.md:6 +msgid "[Create deck](#create-deck)" +msgstr "" + +#: src/deck-picker.md:7 +msgid "[App Bar](#app-bar)" +msgstr "" + +#: src/deck-picker.md:8 +msgid "[Navigation menu button](#navigation-menu-button)" +msgstr "" + +#: src/deck-picker.md:9 +msgid "[Sync button](#sync-button)" +msgstr "" + +#: src/deck-picker.md:10 +msgid "[Overflow menu button](#overflow-menu-button)" +msgstr "" + +#: src/deck-picker.md:11 +msgid "[Studying a Deck](#studying-a-deck)" +msgstr "" + +#: src/deck-picker.md:12 +msgid "[Other Deck Actions](#other-deck-actions)" +msgstr "" + +#: src/deck-picker.md:13 +msgid "[Rename deck](#rename-deck)" +msgstr "" + +#: src/deck-picker.md:14 +msgid "[Deck options](#deck-options)" +msgstr "" + +#: src/deck-picker.md:15 +msgid "[Custom study](#custom-study)" +msgstr "" + +#: src/deck-picker.md:16 +msgid "[Delete deck](#delete-deck)" +msgstr "" + +#: src/deck-picker.md:17 +msgid "[Export deck](#export-deck)" +msgstr "" + +#: src/deck-picker.md:18 src/deck-overview.md:11 +msgid "[Unbury](#unbury)" +msgstr "" + +#: src/deck-picker.md:19 +msgid "[Rebuild / Empty](#rebuild--empty)" +msgstr "" + +#: src/deck-picker.md:20 +msgid "[Clickable areas on the decks](#clickable-areas-on-the-decks)" +msgstr "" + +#: src/deck-picker.md:21 +msgid "[Deck expander](#deck-expander)" +msgstr "" + +#: src/deck-picker.md:22 +msgid "[Deck name](#deck-name)" +msgstr "" + +#: src/deck-picker.md:23 +msgid "[Count buttons](#count-buttons)" +msgstr "" + +#: src/deck-picker.md:24 +msgid "[Advanced Actions](#advanced-actions)" +msgstr "" + +#: src/deck-picker.md:25 src/gestures.md:11 +msgid "[Undo](#undo)" +msgstr "" + +#: src/deck-picker.md:26 +msgid "[Check database](#check-database)" +msgstr "" + +#: src/deck-picker.md:27 +msgid "[Check media](#check-media)" +msgstr "" + +#: src/deck-picker.md:28 +msgid "[Empty cards](#empty-cards)" +msgstr "" + +#: src/deck-picker.md:29 +msgid "[Restore from backup](#restore-from-backup)" +msgstr "" + +#: src/deck-picker.md:30 +msgid "[Manage note types](#manage-note-types)" +msgstr "" + +#: src/deck-picker.md:31 +msgid "[Import](#import)" +msgstr "" + +#: src/deck-picker.md:32 +msgid "[Export collection](#export-collection)" +msgstr "" + +#: src/deck-picker.md:33 +msgid "[Deck Counts](#deck-counts)" +msgstr "" + +#: src/deck-picker.md:35 +msgid "__Note:__ _This section onwards assumes you understand what [decks and cards](https://docs.ankiweb.net/getting-started.html#key-concepts) are_" +msgstr "" + +#: src/deck-picker.md:37 +msgid "The deck list is the screen you see when you start AnkiDroid. It displays a list of the decks which contain all of your flashcards, and allows you to perform various actions:" +msgstr "" + +#: src/deck-picker.md:39 +msgid "![decks.png](img/1-decks.png)" +msgstr "" + +#: src/deck-picker.md:41 +msgid "Add button" +msgstr "" + +#: src/deck-picker.md:42 +msgid "The big blue + button in the bottom right corner is used to add new material to AnkiDroid. Pressing it expands to give the following three options, which are also described in the [tutorial video](https://www.youtube.com/watch?v=F2K1gOSdIZA)." +msgstr "" + +#: src/deck-picker.md:44 +msgid "Add" +msgstr "" + +#: src/deck-picker.md:45 +msgid "Choose this option if you want to create your own flashcards (notes) with AnkiDroid. \"Notes\" and \"cards\" have specific meanings in Anki, which are [explained in the main Anki manual](https://docs.ankiweb.net/getting-started.html#key-concepts). Please see the tutorial video for a quick introduction to adding notes, or refer to the [adding notes](adding-notes.md#add-note-screen) section below for more detailed information." +msgstr "" + +#: src/deck-picker.md:47 +msgid "Get shared decks" +msgstr "" + +#: src/deck-picker.md:48 +msgid "To download a deck of cards from the internet that another user has contributed:" +msgstr "" + +#: src/deck-picker.md:49 +msgid "Ensure you're connected to the internet." +msgstr "" + +#: src/deck-picker.md:50 +msgid "Tap + and then **Get shared decks**. AnkiWeb will open." +msgstr "" + +#: src/deck-picker.md:51 +msgid "Select a category, or type in a search." +msgstr "" + +#: src/deck-picker.md:52 +msgid "Tap **Info** on a deck you'd like to study." +msgstr "" + +#: src/deck-picker.md:53 +msgid "Scroll down and tap **Download**." +msgstr "" + +#: src/deck-picker.md:54 +msgid "You browser will download the file and display a `download complete` notification. Tap this button." +msgstr "" + +#: src/deck-picker.md:56 +msgid "AnkiDroid will appear, and show a confirmation dialog. Tap the **Add** button." +msgstr "" + +#: src/deck-picker.md:57 +msgid "When the import completes, your deck should be ready to study." +msgstr "" + +#: src/deck-picker.md:59 +msgid "Create deck" +msgstr "" + +#: src/deck-picker.md:60 +msgid "To create a new empty deck:" +msgstr "" + +#: src/deck-picker.md:61 +msgid "Tap the **+** button and choose `Create deck`" +msgstr "" + +#: src/deck-picker.md:62 +msgid "Choose a name for the deck, for example `New Japanese`" +msgstr "" + +#: src/deck-picker.md:63 +msgid "Add cards to it following the `Add` instructions above" +msgstr "" + +#: src/deck-picker.md:65 src/reviewer.md:16 +msgid "App Bar" +msgstr "" + +#: src/deck-picker.md:66 +msgid "At the top of each screen in AnkiDroid is the App Bar, with buttons for performing various actions. The following actions are available from the app bar in the deck list:" +msgstr "" + +#: src/deck-picker.md:69 +msgid "Navigation menu button" +msgstr "" + +#: src/deck-picker.md:70 +msgid "Tapping the icon on the far left will show the [left navigation menu](drawer.md#navigation-drawer) for quickly navigating between the main parts of the app." +msgstr "" + +#: src/deck-picker.md:72 +msgid "Sync button" +msgstr "" + +#: src/deck-picker.md:73 +msgid "The circular button with arrows on the right is for synchronizing your cards with the cloud, as described in the [adding decks from cloud](anki-desktop.md#using-anki-desktop-with-ankidroid) section." +msgstr "" + +#: src/deck-picker.md:75 +msgid "Overflow menu button" +msgstr "" + +#: src/deck-picker.md:76 +msgid "On the far right is the overflow menu which contains less commonly used actions. These actions are described further below." +msgstr "" + +#: src/deck-picker.md:78 +msgid "**Hint:** long tapping on a button in the app bar anywhere in the app will display a textual hint describing what the button does!" +msgstr "" + +#: src/deck-picker.md:80 +msgid "Studying a Deck" +msgstr "" + +#: src/deck-picker.md:81 +msgid "To study the cards in a deck, simply tap on the deck name (or the \"STUDY\" button on a 10\" tablet), and AnkiDroid will switch to study mode. " +msgstr "" + +#: src/deck-picker.md:83 +msgid "Note that the currently selected deck is highlighted with a grey background, and if you have any [filtered decks](filtered-deck.md#filtered-decks) they will be highlighted using a blue font. Filtered decks are discussed elsewhere in the manual." +msgstr "" + +#: src/deck-picker.md:85 +msgid "Other Deck Actions" +msgstr "" + +#: src/deck-picker.md:86 +msgid "Long tapping on a deck will show a list of other actions available to perform on that deck:" +msgstr "" + +#: src/deck-picker.md:88 +msgid "Rename deck" +msgstr "" + +#: src/deck-picker.md:89 +msgid "Use this option to rename a deck" +msgstr "" + +#: src/deck-picker.md:91 src/reviewer.md:46 +msgid "Deck options" +msgstr "" + +#: src/deck-picker.md:92 +msgid "Tapping on deck options allows you to configure various deck specific study options. Please see the [desktop documentation](https://docs.ankiweb.net/deck-options.html) for more information about these study options." +msgstr "" + +#: src/deck-picker.md:95 +msgid "Custom study" +msgstr "" + +#: src/deck-picker.md:96 +msgid "Allows you to choose from some convenient presets for studying outside of your normal schedule, for example increasing the study limit for the day. See the section on [filtered decks](filtered-deck.md#filtered-decks) for more detailed information." +msgstr "" + +#: src/deck-picker.md:98 +msgid "Delete deck" +msgstr "" + +#: src/deck-picker.md:99 +msgid "Use this option to delete a deck (note: this action is not reversible, although you can [restore from a backup](backups.md#automatic-backups)" +msgstr "" + +#: src/deck-picker.md:101 +msgid "Export deck" +msgstr "" + +#: src/deck-picker.md:102 +msgid "This option can be used to share a deck with other users. See the [exporting decks](exporting.md#exporting-anki-files) section for more information." +msgstr "" + +#: src/deck-picker.md:104 src/deck-overview.md:40 +msgid "Unbury" +msgstr "" + +#: src/deck-picker.md:105 src/deck-overview.md:41 +msgid "This option is only visible when the selected deck has cards that have been manually or automatically buried." +msgstr "" + +#: src/deck-picker.md:107 +msgid "Rebuild / Empty" +msgstr "" + +#: src/deck-picker.md:108 +msgid "If the selected deck is a [filtered decks](filtered-deck.md#filtered-decks) then you also have the option to rebuild or empty the cards in it." +msgstr "" + +#: src/deck-picker.md:111 +msgid "Clickable areas on the decks" +msgstr "" + +#: src/deck-picker.md:112 +msgid "Each deck in the list has three clickable areas:" +msgstr "" + +#: src/deck-picker.md:114 +msgid "Deck expander" +msgstr "" + +#: src/deck-picker.md:115 +msgid "If you are using [subdecks](https://docs.ankiweb.net/getting-started.html#decks), then a deck expander button may appear on the far left of the deck, which can be used to show / hide the subdecks. A ▶ icon means the deck has hidden subdecks which can be shown, a ▼ icon means the deck has visible subdecks that can be hidden, and no icon means that the deck has no subdecks. " +msgstr "" + +#: src/deck-picker.md:117 +msgid "**Note:** subdecks can be created by using the naming convention `PARENT::CHILD`." +msgstr "" + +#: src/deck-picker.md:119 +msgid "Deck name" +msgstr "" + +#: src/deck-picker.md:120 +msgid "This is the main clickable area, which will take you to the study screen if there are cards available to review." +msgstr "" + +#: src/deck-picker.md:122 +msgid "Count buttons" +msgstr "" + +#: src/deck-picker.md:123 +msgid "The count buttons on the far right of each deck act as a separate clickable area that takes you to the deck overview instead of the study screen. This can be useful if you want to quickly view the number of cards available in the deck." +msgstr "" + +#: src/deck-picker.md:125 +msgid "Advanced Actions" +msgstr "" + +#: src/deck-picker.md:126 +msgid "Some additional actions are located in the overflow menu for less common tasks, which are summarized below:" +msgstr "" + +#: src/deck-picker.md:128 src/reviewer.md:19 src/gestures.md:88 +#: src/keyboard-shortcuts.md:28 +msgid "Undo" +msgstr "" + +#: src/deck-picker.md:129 +msgid "After reviewing the last card in a study session, you can undo it from here." +msgstr "" + +#: src/deck-picker.md:131 +msgid "Check database" +msgstr "" + +#: src/deck-picker.md:132 +msgid "This can automatically fix a lot of problems with your database, and will also purge any unused tags. If you experience any problems with your collection, this is the first action you should try. " +msgstr "" + +#: src/deck-picker.md:134 +msgid "**NOTE:** Under some circumstances, check database will move cards to a deck named _!Recovered Cards_. If this occurs, please move the cards to an appropriate deck via the [card browser](browser.md#findingsearchingbrowsing), and delete _!Recovered Cards_ when it is empty." +msgstr "" + +#: src/deck-picker.md:136 +msgid "Check media" +msgstr "" + +#: src/deck-picker.md:137 +msgid "Try to run this if you experience any issues with media syncing." +msgstr "" + +#: src/deck-picker.md:139 +msgid "Empty cards" +msgstr "" + +#: src/deck-picker.md:140 +msgid "Remove any empty cards from your collection. See the [desktop documentation](https://docs.ankiweb.net/templates/generation.html#card-generation--deletion) for more." +msgstr "" + +#: src/deck-picker.md:142 +msgid "Restore from backup" +msgstr "" + +#: src/deck-picker.md:143 +msgid "Allows you to restore from one of AnkiDroid's [automatic backups](backups.md#automatic-backups)" +msgstr "" + +#: src/deck-picker.md:145 +msgid "Manage note types" +msgstr "" + +#: src/deck-picker.md:146 +msgid "Allows you to add, edit, and delete note types. See the [customizing card layout](advanced-features/customizing-card-layout.md) section for more help with this advanced feature.Keyboard Shortcuts" +msgstr "" + +#: src/deck-picker.md:148 +msgid "Import" +msgstr "" + +#: src/deck-picker.md:149 +msgid "Import a .apkg anki file containing a deck. See the [importing](importing/importing-anki-files.md) section for more." +msgstr "" + +#: src/deck-picker.md:151 +msgid "Export collection" +msgstr "" + +#: src/deck-picker.md:152 +msgid "Export entire collection as a collection.apkg file. See the [exporting](exporting.md) section for more." +msgstr "" + +#: src/deck-picker.md:154 +msgid "Deck Counts" +msgstr "" + +#: src/deck-picker.md:155 +msgid "Next to each deck, three numbers are displayed. The left, blue number, corresponds to how many new cards you have to learn today. Anki will introduce 20 new cards a day by default, and you can customize this number if you'd like. The red number in the middle is for the cards due to be studied today which are currently in the learning phase, and the green number is the cards which are due for review (i.e. cards which have already graduated from the learning phase). On a deck you've never studied before, these numbers will both be zero." +msgstr "" + +#: src/deck-picker.md:157 +msgid "As explained above, tapping on the counts will take you to the deck overview screen." +msgstr "" + +#: src/drawer.md:3 +msgid "![navigation_drawer.png](img/2-navigation_drawer.png)" +msgstr "" + +#: src/drawer.md:5 +msgid "The navigation drawer can be opened from most places in the application by pressing the left menu icon, or alternatively swiping outwards from anywhere on the far left side of the screen. It is used for quickly navigating between different parts of the application. You can switch to the following screens:" +msgstr "" + +#: src/drawer.md:9 +msgid "Decks" +msgstr "" + +#: src/drawer.md:10 +msgid "Takes you to the top level of the app where the list of cards are shown ([more info here](deck-picker.md))" +msgstr "" + +#: src/drawer.md:12 src/keyboard-shortcuts.md:8 src/keyboard-shortcuts.md:51 +msgid "Card Browser" +msgstr "" + +#: src/drawer.md:13 +msgid "Shows a list of all your cards ([more info here](browser.md))" +msgstr "" + +#: src/drawer.md:15 +msgid "Statistics" +msgstr "" + +#: src/drawer.md:16 +msgid "Helps you track your study progress ([more info in Anki manual](https://docs.ankiweb.net/stats.html#statistics) and [here](advanced-features/advanced-statistics.md))" +msgstr "" + +#: src/drawer.md:18 +msgid "Night mode" +msgstr "" + +#: src/drawer.md:19 +msgid "This switches the app to a dark theme which many users find is less straining on the eyes, particularly when reviewing in the dark. See the " +msgstr "" + +#: src/drawer.md:19 +msgid "wiki" +msgstr "" + +#: src/drawer.md:19 +msgid " for instructions on how to customize the card background and font color used in night mode." +msgstr "" + +#: src/drawer.md:21 +msgid "Settings" +msgstr "" + +#: src/drawer.md:22 +msgid "Allows you to customize the app ([more info here](settings.md))" +msgstr "" + +#: src/drawer.md:24 +msgid "Help" +msgstr "" + +#: src/drawer.md:25 +msgid "Opens this web page" +msgstr "" + +#: src/drawer.md:27 +msgid "Send feedback" +msgstr "" + +#: src/drawer.md:28 +msgid "Get support from the AnkiDroid team" +msgstr "" + +#: src/deck-overview.md:3 +msgid "[App bar](#app-bar)" +msgstr "" + +#: src/deck-overview.md:4 +msgid "[Ordinary decks](#ordinary-decks)" +msgstr "" + +#: src/deck-overview.md:5 +msgid "[Custom Study](#custom-study)" +msgstr "" + +#: src/deck-overview.md:6 +msgid "[Filtered decks](#filtered-decks)" +msgstr "" + +#: src/deck-overview.md:7 +msgid "[Empty deck](#empty-deck)" +msgstr "" + +#: src/deck-overview.md:8 +msgid "[Rebuild deck](#rebuild-deck)" +msgstr "" + +#: src/deck-overview.md:9 +msgid "[Overflow menu](#overflow-menu)" +msgstr "" + +#: src/deck-overview.md:10 +msgid "[Deck Options](#deck-options)" +msgstr "" + +#: src/deck-overview.md:13 +msgid "![deck_overview.png](img/3-deck_overview.png)" +msgstr "" + +#: src/deck-overview.md:15 +msgid "From the deck list, if you tap the counts area you will be taken to the deck overview screen. On tablets it is always shown in the area to the right of the deck list." +msgstr "" + +#: src/deck-overview.md:17 +msgid "On this screen you can view a summary of the deck, build custom study sessions, rebuild / empty filtered decks, and change deck options. When visible, pressing the study button will take you to the study screen for that deck." +msgstr "" + +#: src/deck-overview.md:19 +msgid "App bar" +msgstr "" + +#: src/deck-overview.md:20 +msgid "The icons that are shown in the app bar depend on whether your deck is an ordinary deck or a filtered deck." +msgstr "" + +#: src/deck-overview.md:22 +msgid "Ordinary decks" +msgstr "" + +#: src/deck-overview.md:24 +msgid "Custom Study" +msgstr "" + +#: src/deck-overview.md:25 +msgid "Tapping the wrench icon allows you to create a custom session, for example to do extra reviews outside your normal schedule, or study only certain cards inside a deck. See the [filtered deck section](filtered-deck.md) for more information on this." +msgstr "" + +#: src/deck-overview.md:27 +msgid "Filtered decks" +msgstr "" + +#: src/deck-overview.md:29 +msgid "Empty deck" +msgstr "" + +#: src/deck-overview.md:30 +msgid "Tapping the cross icon will empty all of the cards in the current filtered deck (i.e. return them to their original deck)." +msgstr "" + +#: src/deck-overview.md:32 +msgid "Rebuild deck" +msgstr "" + +#: src/deck-overview.md:33 +msgid "Tapping the rebuild icon will rebuild the current filtered deck according to the settings specified in filtered deck options." +msgstr "" + +#: src/deck-overview.md:35 +msgid "Overflow menu" +msgstr "" + +#: src/deck-overview.md:37 +msgid "Deck Options" +msgstr "" + +#: src/deck-overview.md:38 +msgid "Allows you to configure some options related to the current deck, such as the number of new cards and reviews to introduce each day. Please see the [desktop documentation](https://docs.ankiweb.net/deck-options.html) for more information about these study options." +msgstr "" + +#: src/reviewer.md:3 +msgid "Tapping on the deck name from the deck list, or the study button from the deck overview screen will take you to the study screen where you do your study. " +msgstr "" + +#: src/reviewer.md:5 +msgid "![reviewer.png](img/4-reviewer.png)" +msgstr "" + +#: src/reviewer.md:7 +msgid "Basics" +msgstr "" + +#: src/reviewer.md:8 +msgid "If you have not used Anki on a computer before, you may like to have a look at the first [intro video](https://docs.ankiweb.net/getting-started.html#videos) before reading on, as it explains the basic review process." +msgstr "" + +#: src/reviewer.md:10 +msgid "On the top left of the screen you'll see three numbers. From the left, these correspond to new cards, learning cards, and cards to review. These are explained in more detail in the intro videos for the desktop program, so please [check them out](https://docs.ankiweb.net/getting-started.html#videos) if you haven't already." +msgstr "" + +#: src/reviewer.md:12 +msgid "When you've looked at a card's question and remembered the answer, or decided you don't know it, tap the **show answer** button. When you do, the bottom area will change to display 2-4 answer buttons, depending on how you've answered the card previously. The buttons will display the time a card will next be shown, so 10m means **10 minutes** and **5d** means **5 days**. You can tap directly on these buttons to choose a particular answer. " +msgstr "" + +#: src/reviewer.md:14 +msgid "To make reviewing faster, you can configure gestures (for example taps and swipes) to answer cards without using the buttons. See the [preferences section](settings.md) for more information on configuring gestures." +msgstr "" + +#: src/reviewer.md:17 +msgid "The App Bar at the top of the study screen has several buttons for performing various common actions. The number of buttons which are shown is determined automatically by Android based on the size and resolution of your screen. If there is not enough space to show the button for a given action, then the action will be available from the menu instead. If you are unsure what a button does, you can long-tap on it to see the name of the action. The following action are available:" +msgstr "" + +#: src/reviewer.md:20 +msgid "Undo the answer you chose for the last card you studied (button always shown)." +msgstr "" + +#: src/reviewer.md:22 +msgid "Mark Card" +msgstr "" + +#: src/reviewer.md:23 +msgid "Adds a **marked** tag to the current note, so it can be easily found in the browser. This is useful when you want to take some action on the note at a later date, such as looking up a word when you get home. Marked cards also show a small star in the upper-right-hand corner during reviews." +msgstr "" + +#: src/reviewer.md:26 +msgid "Flag Card" +msgstr "" + +#: src/reviewer.md:27 +msgid "Adds a color coded **flag** (red, orange, green, or blue) This can be used as a general purpose indicator to differentiate your cards. Flags are represented by a number from 1-4, corresponding to the previously listed colors." +msgstr "" + +#: src/reviewer.md:30 +msgid "Edit Card" +msgstr "" + +#: src/reviewer.md:31 +msgid "Open the edit note screen, where you can change the content displayed on the flashcard (see the [editing notes section](editing-notes.md) for more help)" +msgstr "" + +#: src/reviewer.md:33 +msgid "Hide / Delete" +msgstr "" + +#: src/reviewer.md:34 +msgid "Give options to bury, suspend, or delete the current note or card" +msgstr "" + +#: src/reviewer.md:36 +msgid "**Bury card / Bury note:** Hides a card or all of the note’s cards from review until the next day. (If you want to unbury cards before then, you can choose “unbury” from the long-press menu in the [deck list](deck-picker.md), or from the [deck overview screen](deck-overview.md).) This is useful if you cannot answer the card at the moment or you want to come back to it another time. Burying can also happen automatically for cards of the same note. If cards were in learning when they are buried, they are moved back to the new card queue or review queue prior to being buried." +msgstr "" + +#: src/reviewer.md:37 +msgid "**Suspend card / Suspend note:** Hides a card or all of the note’s cards from review until they are manually unsuspended (by long-tapping a card in the [card browser](browser.md)). This is useful if you want to avoid reviewing the note for some time, but don’t want to delete it. If cards were in learning when they are suspended, they are moved back to the new card queue or review queue prior to being suspended." +msgstr "" + +#: src/reviewer.md:38 +msgid "**Delete note:** Deletes the note and all of its cards." +msgstr "" + +#: src/reviewer.md:40 +msgid "Replay Audio" +msgstr "" + +#: src/reviewer.md:41 +msgid "If the card has audio on the front or back, it will be played again." +msgstr "" + +#: src/reviewer.md:43 +msgid "Enable / Disable Whiteboard" +msgstr "" + +#: src/reviewer.md:44 +msgid "This action enables or disables the whiteboard feature for the current deck. The whiteboard feature allows you to draw on the screen, which is particularly useful for practicing drawing characters from languages such as Japanese. When the whiteboard has been enabled for the current deck, two new actions will become available for clearing and hiding the whiteboard. Disabling the whiteboard will hide these actions as well as the whiteboard itself." +msgstr "" + +#: src/reviewer.md:47 +msgid "Open the deck specific study options. See the [desktop documentation](https://docs.ankiweb.net/deck-options.html) for more information about these study options." +msgstr "" + +#: src/reviewer.md:49 +msgid "Check Pronunciation" +msgstr "" + +#: src/reviewer.md:50 +msgid "This action enables or disables the temporary audio recorder toolbar at the top of the card. This feature allows you to record your voice and replay it. It is used primarily to check your pronunciation. This toolbar is composed of three buttons: play, stop playing and record microphone audio. This tool can be used while viewing either the question or the answer." +msgstr "" + +#: src/reviewer.md:52 +msgid "Reaching the end of the study session" +msgstr "" + +#: src/reviewer.md:53 +msgid "When you've finished the cards that are due to be studied today, you'll be taken back to the decks list and shown a congratulations message. From here you can select a different deck, or if you've finished studying for the day, you can simply tap the home button in order to close AnkiDroid (and you can also do this in the middle of reviews if you wish)." +msgstr "" + +#: src/reviewer.md:55 +msgid "If you wish to keep studying the same deck further, tap on the deck again which will give you several options for continued study. Please see the [filtered deck](filtered-deck.md) section for more on custom study." +msgstr "" + +#: src/adding-notes.md:3 +msgid "[Type](#type)" +msgstr "" + +#: src/adding-notes.md:4 +msgid "[Deck](#deck)" +msgstr "" + +#: src/adding-notes.md:5 +msgid "[Fields](#fields)" +msgstr "" + +#: src/adding-notes.md:6 +msgid "[Media Buttons](#media-buttons)" +msgstr "" + +#: src/adding-notes.md:7 +msgid "[Tags](#tags)" +msgstr "" + +#: src/adding-notes.md:8 +msgid "[Cards](#cards)" +msgstr "" + +#: src/adding-notes.md:10 +msgid "__Note:__ _This section onwards assumes you understand what [notes, fields, card templates, and note types](https://docs.ankiweb.net/getting-started.html#notes--fields) are_" +msgstr "" + +#: src/adding-notes.md:12 +msgid "To add a new note, tap the **+** button at the bottom of the deck list and choose **Add**." +msgstr "" + +#: src/adding-notes.md:14 +msgid "![adding.png](img/5-adding.png)" +msgstr "" + +#: src/adding-notes.md:16 +msgid "The following controls are available in the add note screen:" +msgstr "" + +#: src/adding-notes.md:18 +msgid "Type" +msgstr "" + +#: src/adding-notes.md:19 +msgid "Allows you to select the type of note you'd like to add. For most purposes the **Basic** note type is sufficient, but for example if you would like an extra card generated which is the reverse of the main card (i.e. shows the **Back** field on the front of the card), you could chose the **Basic (and reversed card)** note type." +msgstr "" + +#: src/adding-notes.md:22 +msgid "Deck" +msgstr "" + +#: src/adding-notes.md:23 +msgid "Allows you to change the deck the generated card/cards will be added to." +msgstr "" + +#: src/adding-notes.md:25 +msgid "Fields" +msgstr "" + +#: src/adding-notes.md:26 +msgid "Below the deck selector are the fields for the note (for example the **Basic** note type has two fields **Front** and **Back**). When you tap on a field, a keyboard will come up, allowing you to type in information." +msgstr "" + +#: src/adding-notes.md:28 +msgid "Media Buttons" +msgstr "" + +#: src/adding-notes.md:29 +msgid "Next to each field is an attach icon, which allows you to add media to your note (this feature is currently in the experimental phase). \n" +"Add image lets you add images either via your device's camera (if it has one), or from your photo library. Record audio allows you to record your voice and place it into a field. The advanced editor lets you automatically search for translations or pronunciation audio files online." +msgstr "" + +#: src/adding-notes.md:33 +msgid "Tags" +msgstr "" + +#: src/adding-notes.md:34 +msgid "Brings up a dialog which lets you add / remove tags from the note." +msgstr "" + +#: src/adding-notes.md:36 +msgid "Cards" +msgstr "" + +#: src/adding-notes.md:37 +msgid "Shows the names of the cards which will be generated for the selected note type. Tapping on this button will bring up a dialog which lets you preview the source code for the card template of the selected note type. From here you can edit, preview, add, and delete card templates. See the [cards and templates section](https://docs.ankiweb.net/templates/intro.html) of the Anki Desktop manual for more information about card templates." +msgstr "" + +#: src/adding-notes.md:39 +msgid "Long press in a text entry field to add a cloze deletion around the selected text, or an empty cloze deletion if there is no selected text." +msgstr "" + +#: src/adding-notes.md:41 +msgid "When you've finished typing in the content of a note, tap the tick icon in the app bar at the top to add it to your collection. Alternatively, if you want to go back to what you were doing without saving, you can tap the app icon, or use the hardware back button." +msgstr "" + +#: src/editing-notes.md:2 +msgid "The edit note screen can be opened by choosing edit while reviewing, or by opening a card in the browser. The edit screen is similar to the add new note screen mentioned above, with some key differences:" +msgstr "" + +#: src/editing-notes.md:5 +msgid "Changing the deck operates on the selected card (which is underlined in the **Cards** box). If a note type is chosen which has more than one card, only the currently selected card will be moved to the new deck." +msgstr "" + +#: src/editing-notes.md:8 +msgid "Changing the **Type** dropdown selector changes to the note type edit mode. In this mode, editing the content of the note (i.e. deck, fields, etc) is disabled, and if a custom note type with more than two fields is being used, additional buttons will appear which let you control the mapping of the fields to the new note type." +msgstr "" + +#: src/editing-notes.md:11 +msgid "If a note type is selected which has less cards than the original note type, only the first n cards will be kept. For example changing from **Basic (and reversed card)** to **Basic** will lead to only the first card being kept. To warn you of this, the text in the **Cards** box will appear red, and a confirmation dialog will be shown before the note is saved." +msgstr "" + +#: src/editing-notes.md:14 +msgid "Hint: to change the type for multiple notes in one go, or to customize the mapping between cards, use the **Change note type** option in the browser on Anki Desktop." +msgstr "" + +#: src/editing-notes.md:16 +msgid "There are also several advanced options available in the main menu:" +msgstr "" + +#: src/editing-notes.md:18 +msgid "Add note" +msgstr "" + +#: src/editing-notes.md:19 +msgid "Create a new empty note" +msgstr "" + +#: src/editing-notes.md:21 +msgid "Copy card" +msgstr "" + +#: src/editing-notes.md:22 +msgid "Copy the current note to a new editable note" +msgstr "" + +#: src/editing-notes.md:24 +msgid "Reset progress" +msgstr "" + +#: src/editing-notes.md:25 +msgid "Move the card to the end of the new card queue. The current state of the card is cleared, but not its revision history." +msgstr "" + +#: src/editing-notes.md:27 src/keyboard-shortcuts.md:59 +msgid "Reschedule" +msgstr "" + +#: src/editing-notes.md:28 +msgid "Allows you to reschedule as a review card on a given date. This is useful if you have imported already-learnt material, and you want to start it off with higher initial intervals." +msgstr "" + +#: src/browser.md:9 +msgid "[Searching](#searching)" +msgstr "" + +#: src/browser.md:10 +msgid "[tag:marked](#tagmarked)" +msgstr "" + +#: src/browser.md:11 +msgid "[is:due](#isdue)" +msgstr "" + +#: src/browser.md:12 +msgid "[front:rabbit](#frontrabbit)" +msgstr "" + +#: src/browser.md:13 +msgid "[flag:1](#flag1)" +msgstr "" + +#: src/browser.md:15 +msgid "You can search for or browse cards by tapping the **Card browser** button from the [navigation drawer](drawer.md)." +msgstr "" + +#: src/browser.md:17 +msgid "![img/6-browser.png](img/6-browser.png)" +msgstr "" + +#: src/browser.md:19 +msgid "The browser screen starts by displaying all the cards in the currently selected deck. You can search for cards in the selected deck by tapping the magnifying glass icon in the top. You can change the selected deck (or change to all decks) by choosing the deck from the dropdown list on the top left." +msgstr "" + +#: src/browser.md:21 +msgid "By default, the first column in the browser gives the text which will be shown on the question (i.e. front side) of the flashcard, and the second column shows the text from the answer (i.e. the back side) of the flashcard. " +msgstr "" + +#: src/browser.md:23 +msgid "The first column can also be configured to show the [sort field](https://docs.ankiweb.net/editing.html#customizing-fields) for a more compact display. The second column can be configured to show many different parameters by tapping the drop down menu in the column heading. " +msgstr "" + +#: src/browser.md:25 +msgid "Note that the content of the columns is dynamically calculated as your scroll through the list of the cards." +msgstr "" + +#: src/browser.md:27 +msgid "From the search results, you can tap on a card to edit it (see the [edit note section](editing-notes.md) above), or long-tapping on it will show a menu allowing you to perform the following actions:" +msgstr "" + +#: src/browser.md:29 +msgid "Mark / unmark note" +msgstr "" + +#: src/browser.md:30 +msgid "Add / remove the **marked** tag from the note. Cards with a marked note are highlighted in purple." +msgstr "" + +#: src/browser.md:32 +msgid "Flag card" +msgstr "" + +#: src/browser.md:33 +msgid "Change or remove the color coded **flag** on the card. Cards with a flag are highlighted in the flags color." +msgstr "" + +#: src/browser.md:35 +msgid "Suspend / unsuspend card" +msgstr "" + +#: src/browser.md:36 +msgid "Suspended cards are highlighted in yellow, and are not shown during review." +msgstr "" + +#: src/browser.md:38 src/gestures.md:107 +msgid "Delete note" +msgstr "" + +#: src/browser.md:39 +msgid "Delete the note of the currently selected card, and all cards belonging to that note. This action cannot be undone without [restoring from backup](backups.md)." +msgstr "" + +#: src/browser.md:41 +msgid "Preview" +msgstr "" + +#: src/browser.md:42 +msgid "Render the currently selected card so that you can see what it looks like in the reviewer." +msgstr "" + +#: src/browser.md:44 +msgid "Select multiple cards" +msgstr "" + +#: src/browser.md:45 +msgid "Long-tapping on a single card will select the single card. While that card is selected, if you long-tap on another card on your screen, then all of the cards between the first selected card and the last card will be selected. This allows for actions to be performed on multiple cards at once." +msgstr "" + +#: src/browser.md:47 +msgid "Searching" +msgstr "" + +#: src/browser.md:48 +msgid "AnkiDroid supports all the search strings that the desktop version of Anki does, allowing you to perform quite complex searches. Some examples:" +msgstr "" + +#: src/browser.md:50 +msgid "tag:marked" +msgstr "" + +#: src/browser.md:51 +msgid "show cards that with the tag **marked**" +msgstr "" + +#: src/browser.md:53 +msgid "is:due" +msgstr "" + +#: src/browser.md:54 +msgid "show only cards that are waiting for review" +msgstr "" + +#: src/browser.md:56 +msgid "front:rabbit" +msgstr "" + +#: src/browser.md:57 +msgid "show only cards where the front field is exactly **rabbit** " +msgstr "" + +#: src/browser.md:59 +msgid "flag:1" +msgstr "" + +#: src/browser.md:60 +msgid "show only cards marked with a red flag" +msgstr "" + +#: src/browser.md:62 +msgid "For a full list of the possibilities, please see the section in the [desktop manual](https://docs.ankiweb.net/searching.html)." +msgstr "" + +#: src/browser.md:64 +msgid "Alternatively, some more commonly used filters (marked, suspended, and tagged cards) can be quickly applied without manually typing them by choosing them from the overflow menu. You can also save and recall common search queries from the menu." +msgstr "" + +#: src/filtered-deck.md:3 +msgid "Anki is designed to optimize the learning process, so that you study the minimum amount necessary to remember the majority of your cards. Once the congratulations screen is reached, further study becomes a case of diminishing returns: the amount of extra time spent going over the same cards again is generally not worth the moderate increase in retention you'll see." +msgstr "" + +#: src/filtered-deck.md:5 +msgid "That said, if you have a test looming, or simply want to pass some time, it's possible to keep reviewing even after you are shown the congratulations message." +msgstr "" + +#: src/filtered-deck.md:7 +msgid "A **filtered deck** is a temporary deck that contains cards based on various criteria, such as **forgotten today**, `is tagged 'hard'`, and so on. After studying cards in a filtered deck, or when the filtered deck is deleted, the cards are automatically returned to their original deck." +msgstr "" + +#: src/filtered-deck.md:9 +msgid "The easiest way to create a filtered deck is by long clicking on a deck and choosing the **custom study** option. " +msgstr "" + +#: src/filtered-deck.md:11 +msgid "Advanced users can create a filtered deck manually, by choosing **Create filtered deck** from the overflow menu in the deck list screen." +msgstr "" + +#: src/filtered-deck.md:13 +msgid "For further information on filtered decks, please see the [desktop documentation](https://docs.ankiweb.net/filtered-decks.html#filtered-decks--cramming)." +msgstr "" + +#: src/importing/importing-anki-files.md:3 +msgid "You can import Anki files (with .apkg file format) directly into AnkiDroid. Other file formats cannot be imported directly into AnkiDroid, however flashcards from most other applications can be imported into Anki Desktop on your computer, which can then be [added into AnkiDroid in the usual way](../anki-desktop.md). See the [importing section of the Anki Desktop manual](https://docs.ankiweb.net/importing/intro.html) for help on importing into Anki Desktop." +msgstr "" + +#: src/importing/importing-anki-files.md:6 +msgid "As in Anki Desktop, AnkiDroid distinguishes between [the two types of .apkg files](https://docs.ankiweb.net/exporting.html) (**collection package** and **deck package**) based on the filename. Collection packages have the name **collection.colpkg**, and when imported will completely _replace all contents_ in AnkiDroid. Any apkg file which is **_not_** named something that ends in **.colpkg** will be treated as a deck package, which will be _merged with any existing content_ when imported into to AnkiDroid." +msgstr "" + +#: src/importing/importing-anki-files.md:8 +msgid "You can import .apkg Anki collection files into AnkiDroid either by opening them using the standard Android system, or by manually importing them from within AnkiDroid:" +msgstr "" + +#: src/importing/importing-anki-files.md:10 +msgid "Open the file using Android" +msgstr "" + +#: src/importing/importing-anki-files.md:11 +msgid "Apkg files are automatically associated with AnkiDroid, so for example if you open a .apkg email attachment which you sent to yourself, then AnkiDroid will automatically open the file and confirm if you want to import it. Simply click OK and the apkg file will be imported." +msgstr "" + +#: src/importing/importing-anki-files.md:13 +msgid "Import the file manually in AnkiDroid" +msgstr "" + +#: src/importing/importing-anki-files.md:14 +msgid "You can also manually import .apkg files as follows:" +msgstr "" + +#: src/importing/importing-anki-files.md:16 +msgid "Connect your device to your computer using USB" +msgstr "" + +#: src/importing/importing-anki-files.md:17 +msgid "Copy the .apkg from your computer to the AnkiDroid folder on your device" +msgstr "" + +#: src/importing/importing-anki-files.md:18 +msgid "Open AnkiDroid on your device" +msgstr "" + +#: src/importing/importing-anki-files.md:19 +msgid "From the main menu in the deck list, choose _Import_" +msgstr "" + +#: src/importing/importing-anki-files.md:20 +msgid "Choose the apkg file you just copied to your device when prompted" +msgstr "" + +#: src/importing/importing-anki-files.md:21 +msgid "Tap OK" +msgstr "" + +#: src/importing/importing-anki-databases.md:3 +msgid "AnkiDroid does not support directly importing Anki database (`.anki2`) files. A database import will replace your collection with the contents the provided file. If you want to perform a full replacement, you should import a `collection[.apkg/.colpkg]` created in the app with the export function." +msgstr "" + +#: src/importing/importing-anki-databases.md:5 +msgid "Importing anki2 files manually" +msgstr "" + +#: src/importing/importing-anki-databases.md:7 +msgid "This is not officially supported, but `.anki2` files can manually be imported if needed, in cases of troubleshooting for example:" +msgstr "" + +#: src/importing/importing-anki-databases.md:9 +msgid "Create a new folder on your Android file system" +msgstr "" + +#: src/importing/importing-anki-databases.md:10 +msgid "Obtain the full path to the folder as provided by your file manager, this will typically appear as: `/storage/emulated/0/`" +msgstr "" + +#: src/importing/importing-anki-databases.md:11 +msgid "Place the `.anki2` file in the newly created folder" +msgstr "" + +#: src/importing/importing-anki-databases.md:12 +msgid "Rename the file to `collection.anki2`" +msgstr "" + +#: src/importing/importing-anki-databases.md:13 +msgid "(If applicable) Temporarily log out of your AnkiWeb account: `Settings - AnkiDroid - AnkiWeb account`" +msgstr "" + +#: src/importing/importing-anki-databases.md:14 +msgid "Open `Settings - Advanced - AnkiDroid Directory` and set the AnkiDroid Directory to the newly created folder." +msgstr "" + +#: src/exporting.md:3 +msgid "AnkiDroid can export your flashcards in the .apkg Anki file format so that you can import them into Anki Desktop, or share them with other people. As in Anki Desktop, you can either export a [collection package or deck package](https://docs.ankiweb.net/exporting.html#packaged-decks), depending on what you are trying to achieve." +msgstr "" + +#: src/exporting.md:6 +msgid "There are two export options available: **include scheduling information** and **include media**. Generally the default options are sufficient, if you choose not to include scheduling information, Anki will assume that you are sharing the deck with other people, and will remove marked and leech tags so that they will have a clean copy of it." +msgstr "" + +#: src/exporting.md:8 +msgid "Exporting collection package" +msgstr "" + +#: src/exporting.md:9 +msgid "When exporting for use in Anki Desktop, you generally want to [export your entire collection](https://docs.ankiweb.net/exporting.html#collection-colpkg), including all your review history etc. " +msgstr "" + +#: src/exporting.md:11 src/exporting.md:28 +msgid "From the main menu in the decks screen:" +msgstr "" + +#: src/exporting.md:13 +msgid "Tap the **Export** item in the menu." +msgstr "" + +#: src/exporting.md:14 +msgid "Tap **OK** using default options" +msgstr "" + +#: src/exporting.md:15 +msgid "Tap **OK** again to email the exported collection.apkg file to yourself, or alternatively you can manually copy to your computer using USB" +msgstr "" + +#: src/exporting.md:17 +msgid "To import the file on your computer:" +msgstr "" + +#: src/exporting.md:19 +msgid "Save the file **collection.apkg** to your desktop" +msgstr "" + +#: src/exporting.md:20 +msgid "Double-click on the file to start Anki." +msgstr "" + +#: src/exporting.md:21 +msgid "Confirm you wish to replace, so that the deck from your mobile device overwrites the old data on your desktop." +msgstr "" + +#: src/exporting.md:23 +msgid "After importing, you can delete the apkg file on your desktop if you wish." +msgstr "" + +#: src/exporting.md:25 +msgid "Exporting deck package" +msgstr "" + +#: src/exporting.md:26 +msgid "If you want to share a deck in AnkiDroid with another user, you can export a deck package. " +msgstr "" + +#: src/exporting.md:30 +msgid "Long tap on the deck you wish to export" +msgstr "" + +#: src/exporting.md:31 +msgid "Tap **Export**" +msgstr "" + +#: src/exporting.md:32 +msgid "Tap **OK** using the default options" +msgstr "" + +#: src/exporting.md:33 +msgid "Tap **OK** again to email the exported apkg to another user" +msgstr "" + +#: src/backups.md:3 +msgid "AnkiDroid will automatically create backups of your collection for you. The backups include all your cards and statistics, but do not include sounds or images." +msgstr "" + +#: src/backups.md:5 +msgid "The backup is taken in the background when you first start the app. A backup will only happen if more than 5 hours has elapsed since the last time a backup was created. By default, AnkiDroid will store the last 8 backups; this number can be changed in the main settings." +msgstr "" + +#: src/backups.md:8 +msgid "You can restore a backup by choosing the _restore from backup_ option from the main menu of the [decks screen](deck-picker.md)." +msgstr "" + +#: src/settings.md:3 +msgid "[AnkiDroid](#ankidroid)" +msgstr "" + +#: src/settings.md:4 +msgid "[AnkiWeb account](#ankiweb-account)" +msgstr "" + +#: src/settings.md:5 +msgid "[Fetch media on sync](#fetch-media-on-sync)" +msgstr "" + +#: src/settings.md:6 +msgid "[Automatic synchronization](#automatic-synchronization)" +msgstr "" + +#: src/settings.md:7 +msgid "[Deck for new cards](#deck-for-new-cards)" +msgstr "" + +#: src/settings.md:8 +msgid "[Language](#language)" +msgstr "" + +#: src/settings.md:9 +msgid "[Error reporting mode](#error-reporting-mode)" +msgstr "" + +#: src/settings.md:10 +msgid "[Notifications](#notifications)" +msgstr "" + +#: src/settings.md:11 +msgid "[Notify when](#notify-when)" +msgstr "" + +#: src/settings.md:12 +msgid "[Vibrate](#vibrate)" +msgstr "" + +#: src/settings.md:13 +msgid "[Blink light](#blink-light)" +msgstr "" + +#: src/settings.md:14 +msgid "[Reviewing](#reviewing)" +msgstr "" + +#: src/settings.md:15 +msgid "[New card position](#new-card-position)" +msgstr "" + +#: src/settings.md:16 +msgid "[Start of next day](#start-of-next-day)" +msgstr "" + +#: src/settings.md:17 +msgid "[Learn ahead limit](#learn-ahead-limit)" +msgstr "" + +#: src/settings.md:18 +msgid "[Timebox limit](#timebox-limit)" +msgstr "" + +#: src/settings.md:19 +msgid "[Display](#display)" +msgstr "" + +#: src/settings.md:20 +msgid "[Keep screen on](#keep-screen-on)" +msgstr "" + +#: src/settings.md:21 +msgid "[Fullscreen mode](#fullscreen-mode)" +msgstr "" + +#: src/settings.md:22 +msgid "[Center align](#center-align)" +msgstr "" + +#: src/settings.md:23 +msgid "[Show button time](#show-button-time)" +msgstr "" + +#: src/settings.md:24 +msgid "[Card zoom](#card-zoom)" +msgstr "" + +#: src/settings.md:25 +msgid "[Image zoom](#image-zoom)" +msgstr "" + +#: src/settings.md:26 +msgid "[Answer button size](#answer-button-size)" +msgstr "" + +#: src/settings.md:27 +msgid "[Show remaining](#show-remaining)" +msgstr "" + +#: src/settings.md:28 +msgid "[Whiteboard](#whiteboard)" +msgstr "" + +#: src/settings.md:29 +msgid "[Stroke width](#stroke-width)" +msgstr "" + +#: src/settings.md:30 +msgid "[Black strokes](#black-strokes)" +msgstr "" + +#: src/settings.md:31 +msgid "[Automatic display answer](#automatic-display-answer)" +msgstr "" + +#: src/settings.md:32 +msgid "[Time to show answer](#time-to-show-answer)" +msgstr "" + +#: src/settings.md:33 +msgid "[Time to show next question](#time-to-show-next-question)" +msgstr "" + +#: src/settings.md:34 +msgid "[Fonts](#fonts)" +msgstr "" + +#: src/settings.md:35 +msgid "[Default font](#default-font)" +msgstr "" + +#: src/settings.md:36 +msgid "[Default font applicability](#default-font-applicability)" +msgstr "" + +#: src/settings.md:37 +msgid "[Browser and editor font](#browser-and-editor-font)" +msgstr "" + +#: src/settings.md:38 +msgid "[Card browser font scaling](#card-browser-font-scaling)" +msgstr "" + +#: src/settings.md:40 +msgid "The preferences screen can be accessed by opening the navigation drawer, and choosing **Settings**. It allows you to customize various application settings and how AnkiDroid appears." +msgstr "" + +#: src/settings.md:42 +msgid "The Preferences screen is divided up into different sections, which are covered below." +msgstr "" + +#: src/settings.md:44 +msgid "AnkiDroid" +msgstr "" + +#: src/settings.md:45 +msgid "These are the general settings which affect the whole app:" +msgstr "" + +#: src/settings.md:47 +msgid "AnkiWeb account" +msgstr "" + +#: src/settings.md:48 +msgid "Change the account used for syncing with the cloud. For more information on syncing, please see [this section](anki-desktop.md)." +msgstr "" + +#: src/settings.md:50 +msgid "Fetch media on sync" +msgstr "" + +#: src/settings.md:51 +msgid "By default, AnkiDroid will sync sounds and images as well as your cards and review history. If you disable this option, sounds and images will not be downloaded from or uploaded to the sync server by AnkiDroid." +msgstr "" + +#: src/settings.md:54 +msgid "Automatic synchronization" +msgstr "" + +#: src/settings.md:55 +msgid "Enable this option if you want AnkiDroid to sync every time you open and close the app. There is a limit of once every ten minutes for this behavior. Once a sync begins you can cancel it by pressing your device's back button, however it can take some time for the cancellation to take effect." +msgstr "" + +#: src/settings.md:57 +msgid "Users that want more fine-grained control over when sync occurred might like to use a 3rd party app like Tasker to automate synchronization. See the " +msgstr "" + +#: src/settings.md:57 +msgid "API documentation" +msgstr "" + +#: src/settings.md:57 +msgid " for more information on this." +msgstr "" + +#: src/settings.md:59 +msgid "Deck for new cards" +msgstr "" + +#: src/settings.md:60 +msgid "The default of **Use current deck** means that Anki saves the last-used note type for each deck and selects it again then next time you choose the deck (and, in addition, will start with the current deck selected when choosing Add from anywhere). The other option, **Decide by note type,** saves the last-used deck for each note type (and opens the add window to the last-used note type when you choose Add). This may be more convenient if you always use a single note type for each deck." +msgstr "" + +#: src/settings.md:62 +msgid "Language" +msgstr "" + +#: src/settings.md:63 +msgid "Change the language. Note: AnkiDroid translations are contributed by volunteers. If you find missing or incorrect translations, feel free to contribute to the translation project. More details can be found on the " +msgstr "" + +#: src/settings.md:63 +msgid "AnkiDroid Wiki" +msgstr "" + +#: src/settings.md:63 src/advanced-features/custom-fonts.md:15 +msgid "." +msgstr "" + +#: src/settings.md:65 +msgid "Error reporting mode" +msgstr "" + +#: src/settings.md:66 +msgid "Control whether or not AnkiDroid asks your permission before sending error reports to our error reporting system when AnkiDroid crashes. You can also disable the reporting feature entirely if you wish." +msgstr "" + +#: src/settings.md:68 +msgid "Notifications" +msgstr "" + +#: src/settings.md:69 +msgid "This subsection allows you configure when and how AnkiDroid shows alerts in the Android notification bar." +msgstr "" + +#: src/settings.md:71 +msgid "Notify when" +msgstr "" + +#: src/settings.md:72 +msgid "**Never notify** will disable all notifications from AnkiDroid. **Pending messages available** will only show important status updates like when a sync completed. **More than n cards due** will show a notification when you have more than n cards due (requires the widget to be enabled)." +msgstr "" + +#: src/settings.md:74 +msgid "Vibrate" +msgstr "" + +#: src/settings.md:75 +msgid "Checking this will make your device vibrate when showing a notification" +msgstr "" + +#: src/settings.md:77 +msgid "Blink light" +msgstr "" + +#: src/settings.md:78 +msgid "Checking this will make your device light blink when an unread notification exists (if your device has a notification LED)" +msgstr "" + +#: src/settings.md:81 +msgid "Reviewing" +msgstr "" + +#: src/settings.md:83 +msgid "The reviewing screen allows you to customize how AnkiDroid behaves when you're reviewing cards. Note that only the reviewing settings which are applied to **all decks** are shown here. There are more settings related to reviewing which are **deck specific**. These deck specific settings are located in **Deck options**." +msgstr "" + +#: src/settings.md:86 +msgid "New card position" +msgstr "" + +#: src/settings.md:87 +msgid "Controls when new cards are shown: either mixed with, after, or before all reviews." +msgstr "" + +#: src/settings.md:89 +msgid "Start of next day" +msgstr "" + +#: src/settings.md:90 +msgid "Controls when AnkiDroid should start showing the next day's cards. The default setting of 4AM ensures that if you're studying around midnight, you won't have two days worth of cards shown to you in one session. If you stay up very late or wake up very early, you may want to adjust this to a time you're usually sleeping." +msgstr "" + +#: src/settings.md:93 +msgid "Learn ahead limit" +msgstr "" + +#: src/settings.md:94 +msgid "The Learn ahead limit tells AnkiDroid how to behave when there is nothing left to study in the current deck but cards in learning. The default setting of 20 minutes tells AnkiDroid that cards should be shown early if they are due to be shown in less than 20 minutes and there's nothing else to do. If you set this to 0, Anki will always wait the full period, showing the congratulations screen until the remaining cards are ready to be reviewed." +msgstr "" + +#: src/settings.md:96 +msgid "Timebox limit" +msgstr "" + +#: src/settings.md:97 +msgid "Timeboxing is a technique to help you focus by dividing a longer activity (such as a 30 minute study session) into smaller blocks. If you set the timebox time limit to a non-zero number of minutes, AnkiDroid will periodically show a message saying you how many cards you've managed to study during the prescribed time limit." +msgstr "" + +#: src/settings.md:99 +msgid "Display" +msgstr "" + +#: src/settings.md:100 +msgid "This subsection relates to the way cards are displayed during reviewing" +msgstr "" + +#: src/settings.md:102 +msgid "Keep screen on" +msgstr "" + +#: src/settings.md:103 +msgid "Ignore the automatic screen timeout setting in Android to always keep the screen on." +msgstr "" + +#: src/settings.md:105 +msgid "Fullscreen mode" +msgstr "" + +#: src/settings.md:106 +msgid "Switches to an immersive fullscreen mode so that you can use more of the screen. You can choose between **Hide the system bars** which will hide the system status bar, action bar, and bottom navigation buttons. Alternatively you can choose **Hide the system bars and answer buttons**, which will hide everything except for the actual card content itself. You can temporarily exit fullscreen mode by swiping inwards (i.e. down or up) from the system bars." +msgstr "" + +#: src/settings.md:108 +msgid "_Note that immersive fullscreen mode is only supported on Android 4.4+_" +msgstr "" + +#: src/settings.md:110 +msgid "Center align" +msgstr "" + +#: src/settings.md:111 +msgid "By default AnkiDroid tries to show cards exactly as they are shown on Anki Desktop, however if you prefer your cards to be center aligned vertically in AnkiDroid then you can enable this feature." +msgstr "" + +#: src/settings.md:113 +msgid "Show button time" +msgstr "" + +#: src/settings.md:114 +msgid "By default, the answer buttons will display the time a card will next be shown. If you disable this option, the times will not appear, and only labels like **Again**, **Good** and **Easy** will be shown." +msgstr "" + +#: src/settings.md:116 +msgid "Card zoom" +msgstr "" + +#: src/settings.md:117 +msgid "Here you can increase the zoom level of the card content (excluding images). You can use this option if you want to increase the font size for all cards." +msgstr "" + +#: src/settings.md:119 +msgid "Image zoom" +msgstr "" + +#: src/settings.md:120 +msgid "Here you can increase the zoom level of any images embedded in your cards." +msgstr "" + +#: src/settings.md:122 +msgid "Answer button size" +msgstr "" + +#: src/settings.md:123 +msgid "If you find it difficult to press the answer button, you can use this setting to make it bigger." +msgstr "" + +#: src/settings.md:125 +msgid "Show remaining" +msgstr "" + +#: src/settings.md:126 +msgid "Disabling this allows you to hide the card count in the top left of the screen." +msgstr "" + +#: src/settings.md:128 +msgid "Whiteboard" +msgstr "" + +#: src/settings.md:129 +msgid "This subsection controls the whiteboard in the reviewer. Note: the whiteboard must be enabled in each deck individually from the menu in the study screen." +msgstr "" + +#: src/settings.md:132 +msgid "Stroke width" +msgstr "" + +#: src/settings.md:133 +msgid "Control the stroke width of the whiteboard. Reducing the stroke width may allow you to draw with more detail." +msgstr "" + +#: src/settings.md:135 +msgid "Black strokes" +msgstr "" + +#: src/settings.md:136 +msgid "Use black strokes instead of color, which may reduce memory usage. Note: this setting doesn't apply when night mode is enabled." +msgstr "" + +#: src/settings.md:138 +msgid "Automatic display answer" +msgstr "" + +#: src/settings.md:139 +msgid "The automatic display answer feature allows you to have the answer shown automatically after some timeout period. You can also have the next question shown automatically; in this case the card is assumed to be failed (i.e. the again button is automatically chosen)" +msgstr "" + +#: src/settings.md:141 +msgid "Time to show answer" +msgstr "" + +#: src/settings.md:142 +msgid "Time to wait until answer is automatically shown" +msgstr "" + +#: src/settings.md:144 +msgid "Time to show next question" +msgstr "" + +#: src/settings.md:145 +msgid "Time to wait until next question is automatically shown." +msgstr "" + +#: src/settings.md:147 +msgid "Fonts" +msgstr "" + +#: src/settings.md:148 +msgid "In this screen you can change the font used by AnkiDroid, and some scaling options related to fonts. See the [custom fonts](advanced-features/custom-fonts.md) section for more information about using custom fonts." +msgstr "" + +#: src/settings.md:151 +msgid "Default font" +msgstr "" + +#: src/settings.md:152 +msgid "Choose the default font used by the AnkiDroid reviewer. You can add fonts to this list by copying them to the **fonts** folder." +msgstr "" + +#: src/settings.md:154 +msgid "Default font applicability" +msgstr "" + +#: src/settings.md:155 +msgid "The default setting is to only use the default font when no font has been specified in the card styling via Anki Desktop, however you can also force the default font to be applied, ignoring any font specification in the card styling." +msgstr "" + +#: src/settings.md:157 +msgid "Browser and editor font" +msgstr "" + +#: src/settings.md:158 +msgid "The font to be used by the browser and editor" +msgstr "" + +#: src/settings.md:160 +msgid "Card browser font scaling" +msgstr "" + +#: src/settings.md:161 +msgid "Lets you change the font size used in the card browser." +msgstr "" + +#: src/gestures.md:3 +msgid "[Actions](#actions)" +msgstr "" + +#: src/gestures.md:4 +msgid "[No action](#no-action)" +msgstr "" + +#: src/gestures.md:5 +msgid "[Answer button 1](#answer-button-1)" +msgstr "" + +#: src/gestures.md:6 +msgid "[Answer button 2](#answer-button-2)" +msgstr "" + +#: src/gestures.md:7 +msgid "[Answer button 3](#answer-button-3)" +msgstr "" + +#: src/gestures.md:8 +msgid "[Answer button 4](#answer-button-4)" +msgstr "" + +#: src/gestures.md:9 +msgid "[Answer recommended (green)](#answer-recommended-green)" +msgstr "" + +#: src/gestures.md:10 +msgid "[Answer better than recommended](#answer-better-than-recommended)" +msgstr "" + +#: src/gestures.md:12 +msgid "[Edit card](#edit-card)" +msgstr "" + +#: src/gestures.md:13 +msgid "[Mark](#mark)" +msgstr "" + +#: src/gestures.md:14 +msgid "[Lookup expression](#lookup-expression)" +msgstr "" + +#: src/gestures.md:15 +msgid "[Bury card](#bury-card)" +msgstr "" + +#: src/gestures.md:16 +msgid "[Suspend card](#suspend-card)" +msgstr "" + +#: src/gestures.md:17 +msgid "[Delete note](#delete-note)" +msgstr "" + +#: src/gestures.md:18 +msgid "[Play media](#play-media)" +msgstr "" + +#: src/gestures.md:19 +msgid "[Abort learning](#abort-learning)" +msgstr "" + +#: src/gestures.md:20 +msgid "[Bury note](#bury-note)" +msgstr "" + +#: src/gestures.md:21 +msgid "[Suspend note](#suspend-note)" +msgstr "" + +#: src/gestures.md:22 +msgid "[Toggle Red Flag](#toggle-red-flag)" +msgstr "" + +#: src/gestures.md:23 +msgid "[Toggle Orange Flag](#toggle-orange-flag)" +msgstr "" + +#: src/gestures.md:24 +msgid "[Toggle Green Flag](#toggle-green-flag)" +msgstr "" + +#: src/gestures.md:25 +msgid "[Toggle Blue Flag](#toggle-blue-flag)" +msgstr "" + +#: src/gestures.md:26 +msgid "[Remove Flag](#remove-flag)" +msgstr "" + +#: src/gestures.md:27 +msgid "[Advanced](#advanced)" +msgstr "" + +#: src/gestures.md:28 +msgid "[Collection path](#collection-path)" +msgstr "" + +#: src/gestures.md:29 +msgid "[Force full sync](#force-full-sync)" +msgstr "" + +#: src/gestures.md:30 +msgid "[Advanced Statistics](#advanced-statistics)" +msgstr "" + +#: src/gestures.md:31 +msgid "[Workarounds](#workarounds)" +msgstr "" + +#: src/gestures.md:32 +msgid "[Type answer into the card](#type-answer-into-the-card)" +msgstr "" + +#: src/gestures.md:33 +msgid "[Input Workaround](#input-workaround)" +msgstr "" + +#: src/gestures.md:34 +msgid "[Longclick Workaround](#longclick-workaround)" +msgstr "" + +#: src/gestures.md:35 +msgid "[Fix for Hebrew Vowels](#fix-for-hebrew-vowels)" +msgstr "" + +#: src/gestures.md:36 +msgid "[Text to Speech](#text-to-speech)" +msgstr "" + +#: src/gestures.md:37 +msgid "[Lookup Dictionary](#lookup-dictionary)" +msgstr "" + +#: src/gestures.md:38 +msgid "[Reset Languages](#reset-languages)" +msgstr "" + +#: src/gestures.md:39 +msgid "[eReader (up/down buttons)](#ereader-updown-buttons)" +msgstr "" + +#: src/gestures.md:40 +msgid "[eReader Double Scrolling](#ereader-double-scrolling)" +msgstr "" + +#: src/gestures.md:42 +msgid "AnkiDroid allows you to customize the interface, so that actions you perform frequently can be accomplished quickly by using tap and swipe gestures." +msgstr "" + +#: src/gestures.md:45 +msgid "Actions" +msgstr "" + +#: src/gestures.md:46 +msgid "The following gestures can be used:" +msgstr "" + +#: src/gestures.md:48 +msgid "Swipe up" +msgstr "" + +#: src/gestures.md:49 +msgid "Swipe down" +msgstr "" + +#: src/gestures.md:50 +msgid "Swipe left" +msgstr "" + +#: src/gestures.md:51 +msgid "Swipe right" +msgstr "" + +#: src/gestures.md:52 +msgid "Double touch" +msgstr "" + +#: src/gestures.md:53 +msgid "Touch top" +msgstr "" + +#: src/gestures.md:54 +msgid "Touch bottom" +msgstr "" + +#: src/gestures.md:55 +msgid "Touch left" +msgstr "" + +#: src/gestures.md:56 +msgid "Tough right" +msgstr "" + +#: src/gestures.md:58 +msgid "The following actions are available for each gesture:" +msgstr "" + +#: src/gestures.md:60 +msgid "No action" +msgstr "" + +#: src/gestures.md:61 +msgid "Don't do anything. Useful if you want to disable certain swipes, tap zones and so on." +msgstr "" + +#: src/gestures.md:63 +msgid "Answer button 1" +msgstr "" + +#: src/gestures.md:64 +msgid "When the answer screen is shown, choose the red button, indicating you wish to review the card again soon. This is useful when you forgot a card or wish to review it more frequently. When the question is shown, this action (and all other answer actions below) will simply show the answer." +msgstr "" + +#: src/gestures.md:69 +msgid "Answer button 2" +msgstr "" + +#: src/gestures.md:70 +msgid "When the answer screen is shown, choose the second button from the left, generally indicating you found the card hard to remember." +msgstr "" + +#: src/gestures.md:73 +msgid "Answer button 3" +msgstr "" + +#: src/gestures.md:74 +msgid "When the answer screen is shown, choose the third button from the left." +msgstr "" + +#: src/gestures.md:76 +msgid "Answer button 4" +msgstr "" + +#: src/gestures.md:77 +msgid "When the answer screen is shown, choose the fourth button from the left (when applicable)." +msgstr "" + +#: src/gestures.md:79 +msgid "Answer recommended (green)" +msgstr "" + +#: src/gestures.md:80 +msgid "When the answer screen is shown, choose the green button. This is the button you should end up using the most." +msgstr "" + +#: src/gestures.md:83 +msgid "Answer better than recommended" +msgstr "" + +#: src/gestures.md:84 +msgid "When the answer screen is shown, choose the button on the right, indicating you found the card too easy to remember and would like a much longer delay." +msgstr "" + +#: src/gestures.md:89 +msgid "Undoes the last action." +msgstr "" + +#: src/gestures.md:91 +msgid "Edit card" +msgstr "" + +#: src/gestures.md:92 +msgid "Edits the current card." +msgstr "" + +#: src/gestures.md:94 +msgid "Mark" +msgstr "" + +#: src/gestures.md:95 +msgid "Adds a tag called **Marked** the current note, so it can be easily found in a search." +msgstr "" + +#: src/gestures.md:97 +msgid "Lookup expression" +msgstr "" + +#: src/gestures.md:98 +msgid "When the lookup feature is enabled (in advanced settings), lookup an expression in the selected dictionary. Note: the expression needs to be copied to the clipboard before this action will work." +msgstr "" + +#: src/gestures.md:101 +msgid "Bury card" +msgstr "" + +#: src/gestures.md:102 +msgid "Hides the current card from review." +msgstr "" + +#: src/gestures.md:104 +msgid "Suspend card" +msgstr "" + +#: src/gestures.md:105 +msgid "Prevent current card from being shown during review until you unsuspend it via the card browser." +msgstr "" + +#: src/gestures.md:108 +msgid "Deletes the currently shown note and all of its cards." +msgstr "" + +#: src/gestures.md:110 +msgid "Play media" +msgstr "" + +#: src/gestures.md:111 +msgid "Replay any audio on the card." +msgstr "" + +#: src/gestures.md:113 +msgid "Abort learning" +msgstr "" + +#: src/gestures.md:114 +msgid "Stop reviewing and go back to the deck overview page." +msgstr "" + +#: src/gestures.md:116 +msgid "Bury note" +msgstr "" + +#: src/gestures.md:117 +msgid "Bury the current note (i.e. hide it until the next day)." +msgstr "" + +#: src/gestures.md:119 +msgid "Suspend note" +msgstr "" + +#: src/gestures.md:120 +msgid "Suspend the current note (i.e. hide it until you unsuspend it)." +msgstr "" + +#: src/gestures.md:122 +msgid "Toggle Red Flag" +msgstr "" + +#: src/gestures.md:123 +msgid "Enables the red flag, unless the flag is already red, in which case the flag is disabled." +msgstr "" + +#: src/gestures.md:125 +msgid "Toggle Orange Flag" +msgstr "" + +#: src/gestures.md:126 +msgid "Enables the orange flag, unless the flag is already orange, in which case the flag is disabled." +msgstr "" + +#: src/gestures.md:128 +msgid "Toggle Green Flag" +msgstr "" + +#: src/gestures.md:129 +msgid "Enables the green flag, unless the flag is already green, in which case the flag is disabled." +msgstr "" + +#: src/gestures.md:131 +msgid "Toggle Blue Flag" +msgstr "" + +#: src/gestures.md:132 +msgid "Enables the blue flag, unless the flag is already blue, in which case the flag is disabled." +msgstr "" + +#: src/gestures.md:134 +msgid "Remove Flag" +msgstr "" + +#: src/gestures.md:135 +msgid "Removes the flag from the card." +msgstr "" + +#: src/gestures.md:137 +msgid "Advanced" +msgstr "" + +#: src/gestures.md:138 +msgid "Some less common features for advanced users are shown here" +msgstr "" + +#: src/gestures.md:140 +msgid "Collection path" +msgstr "" + +#: src/gestures.md:141 +msgid "Change the location where AnkiDroid's data is stored (not recommended)" +msgstr "" + +#: src/gestures.md:143 +msgid "Force full sync" +msgstr "" + +#: src/gestures.md:144 +msgid "Tap this item to force a full upload or download on the next sync (for example, because you accidentally deleted a deck on one side and want to restore the deck rather than having its deletion synchronized)." +msgstr "" + +#: src/gestures.md:147 +msgid "Take into account the effect of future reviews in the **Forecast** graph. More info [here](advanced-features/advanced-statistics.md)." +msgstr "" + +#: src/gestures.md:149 +msgid "Workarounds" +msgstr "" + +#: src/gestures.md:151 +msgid "Type answer into the card" +msgstr "" + +#: src/gestures.md:153 +msgid "If you have set up your cards to ask you to type in the answer (as explained in [this section of the desktop manual](https://docs.ankiweb.net/templates/intro.html)), AnkiDroid will display a keyboard on such cards and allow you to check your answer." +msgstr "" + +#: src/gestures.md:155 +msgid "In order to improve user experience when working with the whiteboard and gestures, we use a typing box separate from the card, which is inconsistent with the way the feature works on Anki Desktop." +msgstr "" + +#: src/gestures.md:157 +msgid "For full consistency with Anki Desktop, you can enable this option which allows you to save screen area, and choose an appropriate font (e.g. Japanese vs Chinese) for the input box." +msgstr "" + +#: src/gestures.md:159 +msgid "Input Workaround" +msgstr "" + +#: src/gestures.md:160 +msgid "Some older devices couldn't gain focus into the text input box for typed-answer fields, so this was added (Hidden for API > 14)." +msgstr "" + +#: src/gestures.md:162 +msgid "Longclick Workaround" +msgstr "" + +#: src/gestures.md:163 +msgid "Some older devices couldn't detect longclick for initiating selecting/copying of text, so this was added (Hidden for API > 10)." +msgstr "" + +#: src/gestures.md:165 +msgid "Fix for Hebrew Vowels" +msgstr "" + +#: src/gestures.md:166 +msgid "Some older devices couldn't render Hebrew text, so this feature was added which allows the user to download and install a Hebrew font which is known to work (Hidden for API > 15)." +msgstr "" + +#: src/gestures.md:168 +msgid "Text to Speech" +msgstr "" + +#: src/gestures.md:169 +msgid "Enable this option to have Android read out all the text on your flashcards using the default text to speech engine. Google's built-in TTS engine should work; 3rd party TTS engines may or may not. AnkiDroid will ask you to select the language for the front and back of your cards once for each deck on the first time you review a card in that deck. To change the language or disable TTS for a given deck after making your initial choice, you'll need to use the **reset languages** option described below and reconfigure for each deck." +msgstr "" + +#: src/gestures.md:173 +msgid "Alternatively, if you want only fragments of cards to be read aloud, or if you want to set the TTS language for multiple decks at once, you can insert `` tags into [card templates](advanced-features/customizing-card-layout.md). For example, with the following template for the back of the card" +msgstr "" + +#: src/gestures.md:178 +msgid "answer" +msgstr "" + +#: src/gestures.md:180 src/gestures.md:194 +msgid "\"android\"" +msgstr "" + +#: src/gestures.md:180 src/gestures.md:194 +msgid "\"en_GB\"" +msgstr "" + +#: src/gestures.md:185 +msgid "only the `EnglishTranslation` field will be read aloud in a British English voice; the `Example` field, lying outside the `` tag, won't be read aloud. Every `` tag needs to have the following two attributes:" +msgstr "" + +#: src/gestures.md:187 +msgid "**`service`**: should be set to **`android`**, otherwise the contents of the **``** tag won't be read aloud;" +msgstr "" + +#: src/gestures.md:188 +msgid "**`voice`**: used to select the TTS language; should be a [two- or three- letter language code](https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes), optionally followed by an underscore and a [two-letter country or region code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2). A frequently updated list of languages supported by the Google TTS engine can be found on its [Wikipedia page](https://en.wikipedia.org/wiki/Google_Text-to-Speech)." +msgstr "" + +#: src/gestures.md:190 +msgid "To make both AnkiDroid and the [AwesomeTTS](https://ankiatts.appspot.com) plugin to the desktop application use a TTS engine to read aloud certain card fragments, put the `` tag inside the `` tag recognised by AwesomeTTS, or vice versa. An example:" +msgstr "" + +#: src/gestures.md:193 +msgid "\"sapi5js\"" +msgstr "" + +#: src/gestures.md:193 +msgid "\"39\"" +msgstr "" + +#: src/gestures.md:193 src/gestures.md:193 +msgid "\"0\"" +msgstr "" + +#: src/gestures.md:193 +msgid "\"Microsoft David Desktop\"" +msgstr "" + +#: src/gestures.md:193 +msgid "\"100\"" +msgstr "" + +#: src/gestures.md:200 +msgid "AnkiDroid automatically ignores `` tags selecting an unknown TTS service. In contrast, AwesomeTTS may display a warning message on encountering the `` tag; to suppress it, uncheck the two _Show errors_ checkboxes on the _Playback_ tab of the _AwesomeTTS: Configuration_ dialog in the desktop application." +msgstr "" + +#: src/gestures.md:202 +msgid "_This feature may be removed in the future in favor of a separately downloadable plugin._" +msgstr "" + +#: src/gestures.md:204 +msgid "Lookup Dictionary" +msgstr "" + +#: src/gestures.md:205 +msgid "Dictionary to use to lookup words copied to the clipboard in the reviewer. After setting up a dictionary, do the following to perform the lookup:" +msgstr "" + +#: src/gestures.md:207 +msgid "Longclick on the text you want to copy in the reviewer" +msgstr "" + +#: src/gestures.md:208 +msgid "After selecting the word you want to copy, press the **copy** icon in the app bar at the top of the screen" +msgstr "" + +#: src/gestures.md:209 +msgid "Tap once anywhere on the flashcard" +msgstr "" + +#: src/gestures.md:210 +msgid "A magnifying glass icon should appear, which performs the lookup when clicked" +msgstr "" + +#: src/gestures.md:212 +msgid "Alternatively, the lookup action can be performed via a gesture." +msgstr "" + +#: src/gestures.md:214 src/gestures.md:222 +msgid "_This feature will likely be removed in the future in favor of a plugin_" +msgstr "" + +#: src/gestures.md:216 +msgid "Reset Languages" +msgstr "" + +#: src/gestures.md:217 +msgid "Useful for resetting the TTS language" +msgstr "" + +#: src/gestures.md:219 +msgid "eReader (up/down buttons)" +msgstr "" + +#: src/gestures.md:220 +msgid "Support for eReader hardware buttons (see [issue 1625](https://github.com/ankidroid/Anki-Android/issues/1625))" +msgstr "" + +#: src/gestures.md:224 +msgid "eReader Double Scrolling" +msgstr "" + +#: src/gestures.md:225 +msgid "Double the scrolling distance when using the eReader hardware buttons" +msgstr "" + +#: src/note-formatting-toolbar.md:3 +msgid "The note formatting toolbar contains basic text formatting buttons (Bold, Italic, Underline, Horizontal Line, Insert Title, Change Font Size, [Insert MathJax](advanced-features/mathjax.md) and Insert Cloze Deletion)." +msgstr "" + +#: src/note-formatting-toolbar.md:5 +msgid "It also allows the addition of user-defined toolbar buttons using HTML. HTML is a powerful language allowing nearly endless customization of your cards. [Our wiki](https://github.com/ankidroid/Anki-Android/wiki/Note-Editor-Toolbar-HTML-Samples) contains common code samples to get you started." +msgstr "" + +#: src/note-formatting-toolbar.md:7 +msgid "A user-defined toolbar button can be removed by long pressing the button and selecting **Delete**." +msgstr "" + +#: src/keyboard-shortcuts.md:3 +msgid "Home Screen" +msgstr "" + +#: src/keyboard-shortcuts.md:5 src/keyboard-shortcuts.md:13 +#: src/keyboard-shortcuts.md:32 src/keyboard-shortcuts.md:53 +#: src/keyboard-shortcuts.md:64 +msgid "Shortcut" +msgstr "" + +#: src/keyboard-shortcuts.md:5 src/keyboard-shortcuts.md:13 +#: src/keyboard-shortcuts.md:32 src/keyboard-shortcuts.md:53 +#: src/keyboard-shortcuts.md:64 +msgid "Purpose" +msgstr "" + +#: src/keyboard-shortcuts.md:7 src/keyboard-shortcuts.md:55 +msgid "A" +msgstr "" + +#: src/keyboard-shortcuts.md:7 +msgid "Add Note" +msgstr "" + +#: src/keyboard-shortcuts.md:8 src/keyboard-shortcuts.md:40 +msgid "B" +msgstr "" + +#: src/keyboard-shortcuts.md:9 +msgid "Y" +msgstr "" + +#: src/keyboard-shortcuts.md:9 +msgid "Sync" +msgstr "" + +#: src/keyboard-shortcuts.md:11 +msgid "Reviewer" +msgstr "" + +#: src/keyboard-shortcuts.md:15 src/keyboard-shortcuts.md:49 +msgid "1" +msgstr "" + +#: src/keyboard-shortcuts.md:15 src/keyboard-shortcuts.md:15 +#: src/keyboard-shortcuts.md:15 src/keyboard-shortcuts.md:20 +#: src/keyboard-shortcuts.md:27 +msgid "," +msgstr "" + +#: src/keyboard-shortcuts.md:15 +msgid "2" +msgstr "" + +#: src/keyboard-shortcuts.md:15 +msgid "3" +msgstr "" + +#: src/keyboard-shortcuts.md:15 +msgid "4" +msgstr "" + +#: src/keyboard-shortcuts.md:15 +msgid "Press the nth answer button" +msgstr "" + +#: src/keyboard-shortcuts.md:16 +msgid "Gamepad Y" +msgstr "" + +#: src/keyboard-shortcuts.md:16 +msgid "Flip Card/Press the first answer button" +msgstr "" + +#: src/keyboard-shortcuts.md:17 +msgid "Gamepad X" +msgstr "" + +#: src/keyboard-shortcuts.md:17 +msgid "Flip Card/Press the second answer button" +msgstr "" + +#: src/keyboard-shortcuts.md:18 +msgid "Gamepad B" +msgstr "" + +#: src/keyboard-shortcuts.md:18 +msgid "Flip Card/Press the third answer button" +msgstr "" + +#: src/keyboard-shortcuts.md:19 +msgid "Gamepad A" +msgstr "" + +#: src/keyboard-shortcuts.md:19 +msgid "Flip Card/Press the fourth answer button" +msgstr "" + +#: src/keyboard-shortcuts.md:20 +msgid "Space" +msgstr "" + +#: src/keyboard-shortcuts.md:20 src/keyboard-shortcuts.md:34 +msgid "Enter" +msgstr "" + +#: src/keyboard-shortcuts.md:20 +msgid "Flip Card/Answer Good" +msgstr "" + +#: src/keyboard-shortcuts.md:21 +msgid "e" +msgstr "" + +#: src/keyboard-shortcuts.md:21 src/keyboard-shortcuts.md:56 +msgid "Edit Note" +msgstr "" + +#: src/keyboard-shortcuts.md:22 +msgid "\\*" +msgstr "" + +#: src/keyboard-shortcuts.md:22 src/keyboard-shortcuts.md:58 +msgid "Mark Note" +msgstr "" + +#: src/keyboard-shortcuts.md:23 +msgid "\\-" +msgstr "" + +#: src/keyboard-shortcuts.md:23 +msgid "Bury Card" +msgstr "" + +#: src/keyboard-shortcuts.md:24 +msgid "=" +msgstr "" + +#: src/keyboard-shortcuts.md:24 +msgid "Bury Note" +msgstr "" + +#: src/keyboard-shortcuts.md:25 +msgid "@" +msgstr "" + +#: src/keyboard-shortcuts.md:25 +msgid "Suspend Card" +msgstr "" + +#: src/keyboard-shortcuts.md:26 +msgid "!" +msgstr "" + +#: src/keyboard-shortcuts.md:26 +msgid "Suspend Note" +msgstr "" + +#: src/keyboard-shortcuts.md:27 +msgid "r" +msgstr "" + +#: src/keyboard-shortcuts.md:27 +msgid "F5" +msgstr "" + +#: src/keyboard-shortcuts.md:27 +msgid "Replay Media" +msgstr "" + +#: src/keyboard-shortcuts.md:28 +msgid "z" +msgstr "" + +#: src/keyboard-shortcuts.md:30 +msgid "Note Editor" +msgstr "" + +#: src/keyboard-shortcuts.md:34 src/keyboard-shortcuts.md:39 +#: src/keyboard-shortcuts.md:40 src/keyboard-shortcuts.md:41 +#: src/keyboard-shortcuts.md:42 src/keyboard-shortcuts.md:43 +#: src/keyboard-shortcuts.md:44 src/keyboard-shortcuts.md:45 +#: src/keyboard-shortcuts.md:46 src/keyboard-shortcuts.md:47 +#: src/keyboard-shortcuts.md:48 src/keyboard-shortcuts.md:49 +#: src/keyboard-shortcuts.md:55 src/keyboard-shortcuts.md:56 +#: src/keyboard-shortcuts.md:57 src/keyboard-shortcuts.md:58 +#: src/keyboard-shortcuts.md:59 src/keyboard-shortcuts.md:66 +msgid "Ctrl" +msgstr "" + +#: src/keyboard-shortcuts.md:34 src/keyboard-shortcuts.md:39 +#: src/keyboard-shortcuts.md:40 src/keyboard-shortcuts.md:41 +#: src/keyboard-shortcuts.md:42 src/keyboard-shortcuts.md:43 +#: src/keyboard-shortcuts.md:44 src/keyboard-shortcuts.md:45 +#: src/keyboard-shortcuts.md:46 src/keyboard-shortcuts.md:47 +#: src/keyboard-shortcuts.md:47 src/keyboard-shortcuts.md:48 +#: src/keyboard-shortcuts.md:48 src/keyboard-shortcuts.md:48 +#: src/keyboard-shortcuts.md:49 src/keyboard-shortcuts.md:55 +#: src/keyboard-shortcuts.md:56 src/keyboard-shortcuts.md:57 +#: src/keyboard-shortcuts.md:58 src/keyboard-shortcuts.md:59 +#: src/keyboard-shortcuts.md:59 src/keyboard-shortcuts.md:66 +msgid "+" +msgstr "" + +#: src/keyboard-shortcuts.md:34 +msgid "Save Note" +msgstr "" + +#: src/keyboard-shortcuts.md:35 src/keyboard-shortcuts.md:57 +msgid "D" +msgstr "" + +#: src/keyboard-shortcuts.md:35 +msgid "Select Deck" +msgstr "" + +#: src/keyboard-shortcuts.md:36 +msgid "L" +msgstr "" + +#: src/keyboard-shortcuts.md:36 src/keyboard-shortcuts.md:62 +msgid "Card Template Editor" +msgstr "" + +#: src/keyboard-shortcuts.md:37 +msgid "N" +msgstr "" + +#: src/keyboard-shortcuts.md:37 +msgid "Select Note Type" +msgstr "" + +#: src/keyboard-shortcuts.md:38 +msgid "T" +msgstr "" + +#: src/keyboard-shortcuts.md:38 +msgid "Edit Tags" +msgstr "" + +#: src/keyboard-shortcuts.md:39 src/keyboard-shortcuts.md:66 +msgid "P" +msgstr "" + +#: src/keyboard-shortcuts.md:39 +msgid "Preview Note" +msgstr "" + +#: src/keyboard-shortcuts.md:40 +msgid "Bold" +msgstr "" + +#: src/keyboard-shortcuts.md:41 +msgid "I" +msgstr "" + +#: src/keyboard-shortcuts.md:41 +msgid "Italic" +msgstr "" + +#: src/keyboard-shortcuts.md:42 +msgid "U" +msgstr "" + +#: src/keyboard-shortcuts.md:42 +msgid "Underline" +msgstr "" + +#: src/keyboard-shortcuts.md:43 src/keyboard-shortcuts.md:59 +msgid "R" +msgstr "" + +#: src/keyboard-shortcuts.md:43 +msgid "Insert Horizontal Rule" +msgstr "" + +#: src/keyboard-shortcuts.md:44 +msgid "H" +msgstr "" + +#: src/keyboard-shortcuts.md:44 +msgid "Insert Title" +msgstr "" + +#: src/keyboard-shortcuts.md:45 +msgid "F" +msgstr "" + +#: src/keyboard-shortcuts.md:45 +msgid "Change Font Size" +msgstr "" + +#: src/keyboard-shortcuts.md:46 +msgid "M" +msgstr "" + +#: src/keyboard-shortcuts.md:46 +msgid "Insert MathJax Equation" +msgstr "" + +#: src/keyboard-shortcuts.md:47 src/keyboard-shortcuts.md:48 +msgid "Shift" +msgstr "" + +#: src/keyboard-shortcuts.md:47 src/keyboard-shortcuts.md:48 +msgid "C" +msgstr "" + +#: src/keyboard-shortcuts.md:47 +msgid "Insert New Cloze Deletion" +msgstr "" + +#: src/keyboard-shortcuts.md:48 src/keyboard-shortcuts.md:59 +msgid "Alt" +msgstr "" + +#: src/keyboard-shortcuts.md:48 +msgid "Insert Cloze Deletion using existing number" +msgstr "" + +#: src/keyboard-shortcuts.md:49 +msgid ".." +msgstr "" + +#: src/keyboard-shortcuts.md:49 +msgid "0" +msgstr "" + +#: src/keyboard-shortcuts.md:49 +msgid "Insert User-Defined HTML" +msgstr "" + +#: src/keyboard-shortcuts.md:55 +msgid "Select All" +msgstr "" + +#: src/keyboard-shortcuts.md:56 +msgid "E" +msgstr "" + +#: src/keyboard-shortcuts.md:57 +msgid "Change Deck" +msgstr "" + +#: src/keyboard-shortcuts.md:58 +msgid "K" +msgstr "" + +#: src/keyboard-shortcuts.md:66 +msgid "Preview Changed" +msgstr "" + +#: src/rtl.md:3 +msgid "Anki and AnkiDroid have full support for RTL languages such as Arabic, Hebrew, and Persian." +msgstr "" + +#: src/rtl.md:5 +msgid "Editing Fields as RTL" +msgstr "" + +#: src/rtl.md:6 +msgid "Fields can be marked as RTL (currently possible only from Anki Desktop) for RTL editing. When a field is marked as RTL, then the text is right-aligned in editing fields and punctuation is correctly displayed at the end (left) of sentences. Text that contains blocks of LTR characters will be properly displayed as well, with the beginning of the sentence appearing to the right of the LTR block and the end of the sentence being displayed to the left of the LTR block." +msgstr "" + +#: src/rtl.md:8 +msgid "Directionality is especially important for editing and creating RTL cloze deletions as the cloze format includes both neutral and LTR markup characters. Therefore it is recommended to use a separate note type for LTR cloze deletions and RTL cloze deletions." +msgstr "" + +#: src/rtl.md:10 +msgid "Displaying Fields as RTL during study" +msgstr "" + +#: src/rtl.md:11 +msgid "To display a field as RTL, with proper right-alignment and directionality (punctuation at left of sentences, proper flow around LTR blocks), the field should be wrapped in a div or span element with the RTL directionality specified:" +msgstr "" + +#: src/rtl.md:14 +msgid "\"rtl\"" +msgstr "" + +#: src/anki-desktop.md:3 +msgid "[Via Cloud Sync](#via-cloud-sync)" +msgstr "" + +#: src/anki-desktop.md:4 +msgid "[Sync existing decks into a new AnkiDroid install](#sync-existing-decks-into-a-new-ankidroid-install)" +msgstr "" + +#: src/anki-desktop.md:5 +msgid "[Sync from AnkiDroid to Computer](#sync-from-ankidroid-to-computer)" +msgstr "" + +#: src/anki-desktop.md:7 +msgid "Anki has a free cloud synchronization service called AnkiWeb that makes it easy to keep your card decks in sync between mobile devices and your computer. If you cannot use sync for some reason, it's also possible to use USB, though this method is more laborious." +msgstr "" + +#: src/anki-desktop.md:9 +msgid "Note that AnkiDroid is not affiliated with Anki Desktop or AnkiWeb. AnkiDroid is based on Anki Desktop but it is developed by an entirely separate community of volunteers." +msgstr "" + +#: src/anki-desktop.md:11 +msgid "![AnkiDesktop.png](img/AnkiDesktop.png)" +msgstr "" + +#: src/anki-desktop.md:13 +msgid "Via Cloud Sync" +msgstr "" + +#: src/anki-desktop.md:14 +msgid "Before you can use AnkiWeb, you'll first need to create an account by visiting [https://ankiweb.net](https://ankiweb.net) and clicking the **Sign Up** button. If you have used AnkiWeb in the past, you can skip this step. After signing up, see the corresponding instructions below, depending on whether you are trying to get your existing decks into AnkiDroid or out of AnkiDroid." +msgstr "" + +#: src/anki-desktop.md:16 +msgid "Sync existing decks into a new AnkiDroid install" +msgstr "" + +#: src/anki-desktop.md:17 +msgid "In this scenario you have some existing Anki decks that you want to copy into a new install of AnkiDroid by syncing with AnkiWeb. Open the Anki client with your existing decks (usually this would be Anki desktop, but it could also mean a version of AnkiDroid you have been using on another device), and click the synchronization button (which has two arrows in a circle) at the top right of the deck list." +msgstr "" + +#: src/anki-desktop.md:19 +msgid "If you have never used AnkiWeb before you will need to enter your credentials if prompted, and then press the **Upload to AnkiWeb** button to confirm overwriting the empty collection on AnkiWeb with your existing decks in Anki. Anki will upload all your cards, images and audio to AnkiWeb. If you have a lot of media, this may take some time." +msgstr "" + +#: src/anki-desktop.md:21 +msgid "Once the synchronization has completed, open AnkiDroid in the device that you are trying to copy the existing decks into, and tap the **Sync** button in the app bar at the top of the main [deck list](deck-picker.md). After entering your AnkiWeb credentials, AnkiDroid will download all your cards and media, and remember your login information for next time." +msgstr "" + +#: src/anki-desktop.md:24 +msgid "Note that if you have any existing material in AnkiDroid before attempting to sync, you may be shown a message asking you to choose to either download from AnkiWeb, or upload to AnkiWeb. If you are happy to lose the cards in AnkiDroid then simply choose **Download**. If you need to merge the existing cards with AnkiDroid then you should see the [resolving conflicts](ankiweb-conflicts.md#dealing-with-merge-conflicts-on-ankiweb) section before continuing." +msgstr "" + +#: src/anki-desktop.md:26 +msgid "After the first synchronization has completed, you can click the sync button again any time you wish to synchronize your changes to the cloud. Only changes made since the previous sync will be sent, so subsequent syncs are a lot faster." +msgstr "" + +#: src/anki-desktop.md:28 +msgid "If you add some new cards on the desktop computer and want to sync them to AnkiDroid, you'd repeat the same basic process: sync on desktop (or close the program, as it syncs automatically on close by default), and then tap the sync button on AnkiDroid." +msgstr "" + +#: src/anki-desktop.md:30 +msgid "Sync from AnkiDroid to Computer" +msgstr "" + +#: src/anki-desktop.md:31 +msgid "The process of syncing from AnkiDroid to computer is essentially the same as syncing from computer to AnkiDroid, but in reverse." +msgstr "" + +#: src/anki-desktop.md:33 +msgid "From the [deck list](deck-picker.md), tap the sync button in the top right (it has two arrows in a circle). If it's your first time using AnkiWeb, you may need to enter your login credentials, and then press the \"upload\" button to upload your AnkiDroid collection to AnkiWeb." +msgstr "" + +#: src/anki-desktop.md:35 +msgid "Once the synchronization has completed, open Anki Desktop on your computer and press the sync button there (with two arrows in a circle), and Anki will download your collection." +msgstr "" + +#: src/ankiweb-conflicts.md:2 +msgid "Although it should not happen often, occasionally you may end up in the position where your cards on AnkiDroid can not be automatically merged with the cards on AnkiWeb. In this case it's necessary to choose to either upload to or download from AnkiWeb, which would overwrite any changes on the other side. " +msgstr "" + +#: src/ankiweb-conflicts.md:4 +msgid "If you have new cards on both sides which you want to keep, before syncing you can [export a deck package](exporting.md) for each deck containing new cards from AnkiDroid, then when you do the sync choose **download** to download from AnkiWeb. After the synchronization has completed, you can import the decks you previously exported from AnkiDroid, as per the [importing section](importing/importing-anki-files.md)." +msgstr "" + +#: src/ankiweb-conflicts.md:6 +msgid "Via USB" +msgstr "" + +#: src/ankiweb-conflicts.md:8 +msgid "If you don't have regular internet access, it's still possible to copy decks back and forth to your device, by using USB." +msgstr "" + +#: src/ankiweb-conflicts.md:10 +msgid "The USB method works by importing or exporting all your decks at once. This means that unlike syncing via AnkiWeb, you can't make changes from two locations at once and then merge them. Instead, if you wish to add cards on the desktop, you need to make sure you export the latest version of your collection from your mobile device first, or you'll end up losing any reviews done on the mobile device." +msgstr "" + +#: src/ankiweb-conflicts.md:12 +msgid "Thus the workflow you would typically use is to export your collection from your mobile device and import it into the desktop, make modifications on the desktop, and then export your collection and import it back into your mobile device." +msgstr "" + +#: src/ankiweb-conflicts.md:14 +msgid "AnkiDroid can't directly import text files. If you wish to do that, you'll need to do that with the desktop program, and then import your collection into AnkiDroid." +msgstr "" + +#: src/ankiweb-conflicts.md:16 +msgid "Copy all decks from Anki Desktop to AnkiDroid via USB" +msgstr "" + +#: src/ankiweb-conflicts.md:18 +msgid "On your computer:" +msgstr "" + +#: src/ankiweb-conflicts.md:19 +msgid "Open the desktop program." +msgstr "" + +#: src/ankiweb-conflicts.md:20 +msgid "Choose File>Export from the menu." +msgstr "" + +#: src/ankiweb-conflicts.md:21 +msgid "Click the **Export...** button. Make sure to leave **all decks** selected, as it's not possible to import individual decks into AnkiDroid. **Include scheduling information** must also remain checked." +msgstr "" + +#: src/ankiweb-conflicts.md:22 +msgid "Anki will automatically create a collection.apkg on your desktop. If the file is named something else, please see the previous step again." +msgstr "" + +#: src/ankiweb-conflicts.md:23 +msgid "Connect your Android device to your computer via the USB cable." +msgstr "" + +#: src/ankiweb-conflicts.md:24 +msgid "Open the file explorer on your computer and view the contents of your Android device." +msgstr "" + +#: src/ankiweb-conflicts.md:25 +msgid "Locate the AnkiDroid folder." +msgstr "" + +#: src/ankiweb-conflicts.md:26 +msgid "Drag the collection.apkg file from your desktop into this AnkiDroid folder." +msgstr "" + +#: src/ankiweb-conflicts.md:28 +msgid "Then in AnkiDroid:" +msgstr "" + +#: src/ankiweb-conflicts.md:29 +msgid "From the main decks screen, tap **Import file** from the menu" +msgstr "" + +#: src/ankiweb-conflicts.md:30 +msgid "Tap on **Collection** and then confirm" +msgstr "" + +#: src/ankiweb-conflicts.md:32 +msgid "Once complete, the decks on your device will have been replaced with the decks from your desktop. See the section on [importing apkg files](importing/importing-anki-files.md) for more help with importing." +msgstr "" + +#: src/ankiweb-conflicts.md:35 +msgid "Copy all decks from AnkiDroid to Anki Desktop via USB" +msgstr "" + +#: src/ankiweb-conflicts.md:37 +msgid "The process to copy your decks from AnkiDroid to Anki Desktop is essentially the same as above, but in reverse." +msgstr "" + +#: src/ankiweb-conflicts.md:38 +msgid "Start with your device disconnected from USB" +msgstr "" + +#: src/ankiweb-conflicts.md:39 +msgid "Choose **Export collection** from the main menu in the Deck Screen" +msgstr "" + +#: src/ankiweb-conflicts.md:40 +msgid "Ensure **Include scheduling information** remains checked and press **OK**" +msgstr "" + +#: src/ankiweb-conflicts.md:41 +msgid "Connect device to computer using USB" +msgstr "" + +#: src/ankiweb-conflicts.md:42 +msgid "Copy the **collection.apkg** from the path specified in the message to the desktop on your computer" +msgstr "" + +#: src/ankiweb-conflicts.md:43 +msgid "Double click on the file to import into Anki Desktop" +msgstr "" + +#: src/ankiweb-conflicts.md:45 +msgid "See the [exporting section](exporting.md) below for more detailed information on exporting from AnkiDroid." +msgstr "" + +#: src/advanced-features/intro.md:3 +msgid "[MathJax Support](mathjax.md)" +msgstr "" + +#: src/advanced-features/intro.md:4 +msgid "[Reverse Cards](reverse-cards.md)" +msgstr "" + +#: src/advanced-features/intro.md:5 +msgid "[Custom Fonts](custom-fonts.md)" +msgstr "" + +#: src/advanced-features/intro.md:6 +msgid "[Custom Card Layout](customizing-card-layout.md)" +msgstr "" + +#: src/advanced-features/intro.md:7 +msgid "[Type in the answer feature](type-in-answer.md)" +msgstr "" + +#: src/advanced-features/intro.md:8 +msgid "[Advanced Statistics](advanced-statistics.md)" +msgstr "" + +#: src/advanced-features/intro.md:9 +msgid "[Reminders](reminders.md)" +msgstr "" + +#: src/advanced-features/intro.md:10 +msgid "[Automatic Language Selection](set-language-hint.md)" +msgstr "" + +#: src/advanced-features/mathjax.md:2 +msgid "Mathjax is a modern typesetting library for math and chemistry. AnkiDroid supports Mathjax cards out of the box. Mathjax is configured to expect TeX formatting, with `\\(` and `\\)` delimiting inline equations and `\\[` and `\\]` for display equations." +msgstr "" + +#: src/advanced-features/mathjax.md:4 +msgid "To try it out, enter the following into a field:" +msgstr "" + +#: src/advanced-features/mathjax.md:10 +msgid "and preview the card." +msgstr "" + +#: src/advanced-features/mathjax.md:12 +msgid "For more details, see [Mathjax Support](https://docs.ankiweb.net/math.html#mathjax) in the Anki Manual." +msgstr "" + +#: src/advanced-features/mathjax.md:14 +msgid "[Previous workarounds](https://www.reddit.com/r/Anki/comments/ar7lxd/how_to_load_mathjax_color_extension_on_anki/egm6u5j) are no longer necessary as of AnkiDroid 2.9." +msgstr "" + +#: src/advanced-features/reverse-cards.md:3 +msgid "The Anki system has [built-in note types which allow you to review cards in both directions](https://docs.ankiweb.net/getting-started.html#note-types). When [creating new material](../adding-notes.md) in AnkiDroid, you should choose one of these note types, such as **Basic (and reversed card)**, which will automatically generate a reverse card for you." +msgstr "" + +#: src/advanced-features/reverse-cards.md:6 +msgid "![ReverseNoteType](../img/ReverseNoteType.png)" +msgstr "" + +#: src/advanced-features/reverse-cards.md:8 +msgid "If you used the wrong note type when adding your material, you can change the note type via the [edit note screen](../editing-notes.md), or you can change the note type for multiple cards at once using the browser in Anki Desktop. To do this, follow the instructions in the [syncing with Anki Desktop section](../anki-desktop.md), then in Anki Desktop open the browser, select the cards you want to change, then choose **Change note type** from the menu." +msgstr "" + +#: src/advanced-features/reverse-cards.md:11 +msgid "Alternatively, if your cards are using a custom card layout which doesn't include a reverse card, you can edit the note type to include a reverse card by following the instructions in the [reverse cards section](https://docs.ankiweb.net/templates/generation.html#reverse-cards) of the Anki Desktop user manual. While less convenient than using Anki Desktop, it is possible to edit the note type from directly within AnkiDroid as well; see the [custom card layout section](../advanced-features/customizing-card-layout.md) for more on this." +msgstr "" + +#: src/advanced-features/custom-fonts.md:3 +msgid "AnkiDroid allows you to use non-system fonts on your cards. To set them up properly, it is strongly recommended to use the official method that is used by Anki Desktop. Please see [the corresponding section in the desktop manual](https://docs.ankiweb.net/templates/styling.html#installing-fonts) for more information." +msgstr "" + +#: src/advanced-features/custom-fonts.md:5 +msgid "Alternatively, you can create a new subfolder **fonts** in the main AnkiDroid directory (i.e. the folder which contains the **backups** subfolder, specified under `Settings > Advanced > AnkiDroid directory)`, copy a compatible font file (i.e. .ttf) there, and then set this as the default font under `Settings > Fonts > Default font`. " +msgstr "" + +#: src/advanced-features/custom-fonts.md:7 +msgid "**Note:** this method will change the default font for **all** of your cards, whereas the official method can be more specific. Also, if you sync with AnkiWeb, using this method will lead to cards being displayed differently on different devices." +msgstr "" + +#: src/advanced-features/custom-fonts.md:9 +msgid "Only fonts in the ttf format are officially supported in Anki/AnkiDroid; the [Google Noto](https://fonts.google.com/noto) font set is highly recommended for all languages, and some other free fonts can be found [here](https://github.com/ankidroid/Anki-Android/wiki/Freely-distributable-fonts)." +msgstr "" + +#: src/advanced-features/custom-fonts.md:11 +msgid "Please note that AnkiDroid has to load the entire font into memory in order to use it, and fonts for Asian languages can be quite large. If you have an older device and notice AnkiDroid crashing frequently after installing a font, you may have exceeded your device's memory limits. For Google Noto, it's not recommended to use the combined CJK font, rather get the individual languages [separately from here](https://github.com/googlei18n/noto-cjk)." +msgstr "" + +#: src/advanced-features/custom-fonts.md:13 +msgid "**Note 1**: If you have **Fetch media on sync** disabled, you may need to manually copy the font file from Anki Desktop to your AnkiDroid/collection.media folder." +msgstr "" + +#: src/advanced-features/custom-fonts.md:15 +msgid "**Note 2**: If you can't get your font to work after following the steps in here and the Anki Desktop manual, please refer to the FAQ for " +msgstr "" + +#: src/advanced-features/custom-fonts.md:15 +msgid "detailed steps on how to debug font issues" +msgstr "" + +#: src/advanced-features/customizing-card-layout.md:2 +msgid "The layout of flashcards is completely customizable, although this is an advanced topic with a fairly steep learning curve, and you will probably find it a lot more convenient to do the customization with [Anki Desktop](../anki-desktop.md). " +msgstr "" + +#: src/advanced-features/customizing-card-layout.md:4 +msgid "The [card templates section](https://docs.ankiweb.net/templates/intro.html) of the Anki Desktop manual has detailed instructions on how to edit note types, and most of the actions discussed there are also available from AnkiDroid by tapping **cards** at the bottom of the note editor, or choosing the **manage note types** option in the deck picker. Since detailed information on customizing card layouts is available in the Anki desktop manual, it will not be repeated here." +msgstr "" + +#: src/advanced-features/customizing-card-layout.md:6 +msgid "There is an [advanced formatting page](https://github.com/ankidroid/Anki-Android/wiki/Advanced-formatting) on the AnkiDroid wiki with various hints on how you can get the most out of your card formatting, and we encourage you to read it, and edit it freely if you have any tips that you'd like to share with the community." +msgstr "" + +#: src/advanced-features/type-in-answer.md:3 +msgid "AnkiDroid allows you to type in the correct answer and then compare it to the right answer. You have to set this up with Anki desktop, as described in the [Anki Desktop manual](https://docs.ankiweb.net/templates/fields.html#checking-your-answer)." +msgstr "" + +#: src/advanced-features/type-in-answer.md:5 +msgid "Anki desktop replaces the **{{type:NN}}** field on the front of a card with an input box in the card. On AnkiDroid it is replaced with a **......** prompt instead, and a text input box is shown at the bottom. The comparison between typed text and the correct text is shown on the answer side in place of the **{{type:NN}}** field there, like on Anki desktop." +msgstr "" + +#: src/advanced-features/type-in-answer.md:7 +msgid "The text input box and the soft keyboard can be hidden by ticking **Disable typing in answer** in the preferences." +msgstr "" + +#: src/advanced-features/type-in-answer.md:9 +msgid "Even with typing disabled, the correct answer is shown on the answer side. This is done on purpose; otherwise the correct answer might not be shown at all." +msgstr "" + +#: src/advanced-features/type-in-answer.md:11 +msgid "To hide the comparison (e.g. because the correct answer is shown anyway), the HTML id **typeans** can be used. Add following to the [card styling](https://docs.ankiweb.net/templates/styling.html#card-styling) using Anki Desktop." +msgstr "" + +#: src/advanced-features/type-in-answer.md:19 +msgid "The type answer prompt and the comparison have more classes that can be used to change the way they are displayed. Some of these are the same as on Anki Desktop, some are specific to AnkiDroid." +msgstr "" + +#: src/advanced-features/type-in-answer.md:21 +msgid "The comparison uses three classes, typeGood, typeBad and typeMissed to add green, red and gray background to the typing comparison. These three classes are used on Anki desktop as well." +msgstr "" + +#: src/advanced-features/type-in-answer.md:23 +msgid "The **......** prompt has the class **typePrompt**." +msgstr "" + +#: src/advanced-features/type-in-answer.md:25 +msgid "When typing is set to off in the preferences, the class **typeOff** is added to the prompt on the question side, and to the div element containing the comparison on the answer side. This class can be used to show the type prompt or to hide the typing comparison in this case." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:3 +msgid "If Advanced Statistics are enabled, it changes the **Forecast** graph so that it shows the estimated number of reviews that will be due on a given day in the future taking into account future reviews, learning new cards and failing cards. The bars and the left axis show the number of cards due on each day if you study all cards each day, while the line and the right axis show the number of unseen (shown as **learn**), young and mature cards your deck or collection will consist of if you study all cards each day. The forecast graph does count reviews that are currently overdue. It assumes that the overdue cards will be reviewed according to the **maximum reviews/day** deck option." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:5 +msgid "Advanced Statistics can be enabled in `Settings -> Advanced -> Advanced Statistics` (in plugin section)." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:7 +msgid "The outcome of future reviewing, learning or failing cards affects reviews after that future review. To take this into account, the probability of each outcome is computed from the review log. Then the outcome is randomly chosen, such that an outcome which is more likely according to the review log is more likely to be chosen than an outcome which is less likely according to the review log. The settings all affect how the effect of the outcome of future reviews on subsequent reviews is taken into account." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:9 +msgid "Compute first n days, simulate remainder" +msgstr "" + +#: src/advanced-features/advanced-statistics.md:10 +msgid "If this setting is set to a number greater than 0, instead of randomly choosing an outcome, each possible outcome is taken into account in the simulation, together with its probability. The probability is taken into account for the graph and for future reviews in which it results, which also affect the graph. One review has a couple of possible outcomes (say 4), which all result in a review. That review also has a couple of possible outcomes and so on. If many reviews are simulated this way, many reviews (4 x 4 x 4 x ... ) have to be taken into account which increases the time it takes to compose the graph. Therefore, for reviews later than n days from now are simulated by randomly choosing an outcome." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:14 +msgid "In summary, higher n gives a more accurate graph, but it takes more time to compose the graph." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:16 +msgid "Precision of computation" +msgstr "" + +#: src/advanced-features/advanced-statistics.md:18 +msgid "Reviews which occur with a probability smaller than 100% minus the configured precision of the computation are simulated by randomly choosing an outcome rather than taking into account each possible outcome. This setting is only applicable if the first n days are computed. If Advanced Statistics are disabled, the **Forecast** graph shows the estimated number of reviews that will be due on a given day in the future if you do not review cards, learn no new cards and fail no cards." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:21 +msgid "In summary, higher precision gives a more accurate graph, but it takes more time to compose the graph." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:23 +msgid "Number of iterations of the simulation" +msgstr "" + +#: src/advanced-features/advanced-statistics.md:24 +msgid "Composes the graph several times and then displays the average of these graphs. Each time the graph is composed, another outcome might be randomly chosen. If we average many outcomes which are randomly chosen taking into account the probabilities from the review log, the average outcome will likely be close to the average of the probabilities from the review log. If we average many graphs, the average graph will likely be close to the graph which is generated by taking into account all possible outcomes. If the number of graphs which are averaged is not too high, it will be faster than taking into account all possible outcomes." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:29 +msgid "In summary, a higher number of iterations gives a more accurate graph, but it takes more time to compose the graph." +msgstr "" + +#: src/advanced-features/reminders.md:2 +msgid "AnkiDroid can remind you to devote some time to reviewing cards every day at a specific time via Android's notification framework. You can configure reminders for each options group independently. To configure a notification go to Deck options > Reminders, then tick the checkbox and select the time you want to be notified at. To stop receiving notifications go to Deck options > Reminders and unmark the checkbox." +msgstr "" + +#: src/advanced-features/reminders.md:7 +msgid "Notifications only work for top level decks. Please let us know if you want us to add notifications for subdecks too." +msgstr "" + +#: src/advanced-features/set-language-hint.md:2 +msgid "AnkiDroid has an in Automatic Language Selection feature in the Note Editor starting with AnkiDroid 2.13. This feature allows you to define a default language to be used in your keyboard for a field in a note type." +msgstr "" + +#: src/advanced-features/set-language-hint.md:5 +msgid "For example, if you have Russian and English note fields, and your keyboard supports the setImeHintLocales Android API, the keyboard layout will switch to Russian in the first field and back to English in the second automatically when the fields get focus. [Checkout video reference for demonstration](https://www.youtube.com/watch?v=JrxDjTrRhBE)" +msgstr "" + +#: src/help.md:1 +msgid "Help & Support" +msgstr "" + +#: src/help.md:3 +msgid "Before Asking" +msgstr "" + +#: src/help.md:5 +msgid "Before asking for help, please try searching through the [AnkiDroid Manual](intro.md), the list of [Frequently Asked Questions](https://github.com/ankidroid/Anki-Android/wiki/FAQ), and also the main [Anki Manual](https://docs.ankiweb.net) for general help with the Anki system and features, and any issues not limited to Android." +msgstr "" + +#: src/help.md:7 +msgid "Support" +msgstr "" + +#: src/help.md:8 +msgid "If you were unable to find what you needed in the documentation above, please visit the relevant site below:" +msgstr "" + +#: src/help.md:10 +msgid "Non-Android-Specific Issues" +msgstr "" + +#: src/help.md:11 +msgid "AnkiDroid (the Android version of Anki) is created and managed independently from other Anki versions. For the PC / Web / iOS versions, and general Anki issues that are not limited to Android, please visit the main [Anki support site](https://forums.ankiweb.net)." +msgstr "" + +#: src/help.md:13 +msgid "AnkiDroid Questions" +msgstr "" + +#: src/help.md:14 +msgid "For questions and help concerning AnkiDroid, please visit the [user forum](https://groups.google.com/g/anki-android), or you can send your questions to the forum's [public email address](mailto:public-forum@ankidroid.org) if you don't want to register on the forum." +msgstr "" + +#: src/help.md:16 +msgid "Bug Reports and Feature Requests" +msgstr "" + +#: src/help.md:17 +msgid "For bug reports and feature requests, please search through the current list of open issues on the [AnkiDroid issue tracker](https://github.com/ankidroid/Anki-Android/issues), and if there are no existing issues, create a new issue including as much information as possible. For bug reports, please also include the output of **debug info** by following the steps below: " +msgstr "" + +#: src/help.md:20 +msgid "Open the navigation drawer by tapping the button on the top left of the screen" +msgstr "" + +#: src/help.md:21 +msgid "Tap **settings**" +msgstr "" + +#: src/help.md:22 +msgid "Tap **advanced**" +msgstr "" + +#: src/help.md:23 +msgid "Tap **about AnkiDroid** at the bottom" +msgstr "" + +#: src/help.md:24 +msgid "Tap the **copy debug info** button at the bottom (which copies **debug info** to the clipboard)" +msgstr "" + +#: src/help.md:25 +msgid "If filling out the bug report on your mobile device, paste the contents of the clipboard directly to the issue. Alternatively, you can paste the contents of the clipboard into a new email, send it to yourself, then copy and paste that into the bug report from your computer." +msgstr "" + +#: src/help.md:27 +msgid "![DebugInfo.png](img/DebugInfo.png)" +msgstr "" + +#: src/help.md:29 +msgid "**Note:** if you are unable to open the app at all, so cannot even access **settings** then please follow [these instructions](https://github.com/ankidroid/Anki-Android/wiki/Unopenable-collections)." +msgstr "" + +#: src/help.md:31 +msgid "This **debug info** is important as it allows us to match your report with our internal crash report data. " +msgstr "" + +#: src/help.md:34 +msgid "AnkiDroid is an open source project, and anyone is welcome to contribute (including non-developers)! For help with contributing to AnkiDroid, please first check the [contribution wiki page](https://github.com/ankidroid/Anki-Android/wiki/Contributing), and ask any further questions in the [main forum](https://groups.google.com/g/anki-android)." +msgstr "" + +#: src/beta-testing.md:2 +msgid "If you want to try out the latest features in AnkiDroid, you can sign up for the beta testing program as follows:" +msgstr "" + +#: src/beta-testing.md:4 +msgid "Visit the [Google Play Beta page](https://play.google.com/apps/testing/com.ichi2.anki)" +msgstr "" + +#: src/beta-testing.md:5 +msgid "Click **Become a beta tester**" +msgstr "" + +#: src/beta-testing.md:7 +msgid "After following these steps, the latest beta version will automatically be installed by Google Play in the same way as ordinary updates." +msgstr "" + +#: src/beta-testing.md:9 +msgid "If you are more adventurous, you can also become an alpha tester, by joining the [alpha testers group](https://groups.google.com/g/ankidroidalphatesters) in addition to performing the above steps for beta testing." +msgstr "" + +#: src/beta-testing.md:11 +msgid "Please submit any bugs you find in these development versions to the AnkiDroid issue tracker, as per the [main help page](help.md)." +msgstr "" + +#: src/beta-testing.md:13 +msgid "If you wish to leave the testing program at any time, simply visit the [Google Play Beta page](https://play.google.com/apps/testing/com.ichi2.anki) and click **Leave the test**." +msgstr "" + +#: src/contributing.md:3 +msgid "[Get involved](#get-involved)" +msgstr "" + +#: src/contributing.md:4 +msgid "[Translate](#translate)" +msgstr "" + +#: src/contributing.md:5 +msgid "[Develop](#develop)" +msgstr "" + +#: src/contributing.md:7 +msgid "AnkiDroid is an open source project, and its development relies on contributions from volunteers. Here are some of the ways you can contribute to the AnkiDroid project:" +msgstr "" + +#: src/contributing.md:9 +msgid "Get involved" +msgstr "" + +#: src/contributing.md:10 +msgid "Rate the app, join the [AnkiDroid forum](https://groups.google.com/g/anki-android) and answer questions for other users, submit bug reports, become a [beta tester](beta-testing.md), etc. More detailed information on ways you can contribute as a non-developer can be found on the [Wiki](https://github.com/ankidroid/Anki-Android/wiki/Contributing)." +msgstr "" + +#: src/contributing.md:12 +msgid "Translate" +msgstr "" + +#: src/contributing.md:13 +msgid "Translations of AnkiDroid and this user manual are all contributed by users, and are greatly appreciated. See the " +msgstr "" + +#: src/contributing.md:14 +msgid "translating" +msgstr "" + +#: src/contributing.md:14 +msgid " wiki page for detailed instructions on how to contribute translations." +msgstr "" + +#: src/contributing.md:16 +msgid "Develop" +msgstr "" + +#: src/contributing.md:17 +msgid "The source code for AnkiDroid is available on our main [Github page](https://github.com/ankidroid/Anki-Android), and bug fixes as well as new features are very welcome. Before investing a lot of time on working on a new feature, you may like to ask on the forum first if it's likely to be merged into the main project, as not all features will be accepted. If you are just getting started with Android programming, feel free to ask on the forum for some tips and/or tasks which are suitable for beginners." +msgstr "" + +#: src/changelog/v2.15.md:1 +msgid "Version 2.15.6 (20210714)" +msgstr "" + +#: src/changelog/v2.15.md:2 +msgid "One more crash fix, no crashes shall be left unfixed! If we can help it." +msgstr "" + +#: src/changelog/v2.15.md:4 +msgid "Version 2.15.5 (20210713)" +msgstr "" + +#: src/changelog/v2.15.md:5 +msgid "[🤜🤛 Thank you! Your support makes the fixes happen!](https://opencollective.com/ankidroid)" +msgstr "" + +#: src/changelog/v2.15.md:6 +msgid "Full-screen navigation drawer drag is a preference, default off" +msgstr "" + +#: src/changelog/v2.15.md:7 +msgid "Floating Action Button ('+') labels are clickable again" +msgstr "" + +#: src/changelog/v2.15.md:8 +msgid "Fixed crash on first run post-install on tablets" +msgstr "" + +#: src/changelog/v2.15.md:9 +msgid "Fixed odd weekly breakdown stats chart behavior" +msgstr "" + +#: src/changelog/v2.15.md:10 +msgid "Fixed crash creating new deck from deck chooser" +msgstr "" + +#: src/changelog/v2.15.md:11 +msgid "[Updated translations](https://crowdin.com/project/ankidroid) (thank you translators!)" +msgstr "" + +#: src/changelog/v2.15.md:12 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/47?closed=1)" +msgstr "" + +#: src/changelog/v2.15.md:13 +msgid "We are deep into development for v2.16 + Google Summer of Code, lots of new stuff coming" +msgstr "" + +#: src/changelog/v2.15.md:14 +msgid "Happy reviewing!" +msgstr "" + +#: src/changelog/v2.15.md:16 +msgid "Version 2.15.4 (20210602)" +msgstr "" + +#: src/changelog/v2.15.md:17 +msgid "Saw one crash show up for 2.15.3: if you touched the 3 numbers instead of the deck name on the deck list on phones, it would crash" +msgstr "" + +#: src/changelog/v2.15.md:19 +msgid "Temporarily revert full screen navigation drawer option to fix" +msgstr "" + +#: src/changelog/v2.15.md:21 +msgid "Version 2.15.3 (20210602)" +msgstr "" + +#: src/changelog/v2.15.md:22 +msgid "[❤️ Thank you so much for the donations! We appreciate it ❤️](https://opencollective.com/ankidroid)" +msgstr "" + +#: src/changelog/v2.15.md:23 +msgid "Another batch of fixes stabilizing all the work done for AnkiDroid 2.15" +msgstr "" + +#: src/changelog/v2.15.md:24 +msgid "Fix \"Search All Decks\" in Card Browser not searching" +msgstr "" + +#: src/changelog/v2.15.md:25 +msgid "Make new full screen navigation drawer open optional, default off" +msgstr "" + +#: src/changelog/v2.15.md:26 +msgid "Preserve edited search in card browser if navigation drawer opens" +msgstr "" + +#: src/changelog/v2.15.md:27 +msgid "Fix crash editing Tags dialog when switching back from another app" +msgstr "" + +#: src/changelog/v2.15.md:28 +msgid "Fix incorrect cloze help link" +msgstr "" + +#: src/changelog/v2.15.md:29 +msgid "Increase touchable area of undo icon" +msgstr "" + +#: src/changelog/v2.15.md:30 +msgid "Fix legacy / handebar template parsing" +msgstr "" + +#: src/changelog/v2.15.md:31 +msgid "Fix icon sizes for notifications and search" +msgstr "" + +#: src/changelog/v2.15.md:32 +msgid "Fix audio files incorrectly importing when attached" +msgstr "" + +#: src/changelog/v2.15.md:33 +msgid "Fix deck options \"steps\" showing up with lots of decimal places" +msgstr "" + +#: src/changelog/v2.15.md:34 +msgid "Update translations, add Kannada language" +msgstr "" + +#: src/changelog/v2.15.md:35 +msgid "Fix F-Droid app store publishing" +msgstr "" + +#: src/changelog/v2.15.md:36 +msgid "Correct navigation away from and back to Changelog" +msgstr "" + +#: src/changelog/v2.15.md:37 +msgid "Fix template parsing for \"{{FrontSide}}\"" +msgstr "" + +#: src/changelog/v2.15.md:38 +msgid "Fix stats tab view layout in RTL context" +msgstr "" + +#: src/changelog/v2.15.md:39 +msgid "Fix preview of cloze cards from note editor " +msgstr "" + +#: src/changelog/v2.15.md:40 +msgid "[Full changelog here](https://github.com/ankidroid/Anki-Android/milestone/45?closed=1)" +msgstr "" + +#: src/changelog/v2.15.md:43 +msgid "Version 2.15.2 (20210526)" +msgstr "" + +#: src/changelog/v2.15.md:44 +msgid "[❤️ Your donations here give us the time to work on the app, thank you! ❤️](https://opencollective.com/ankidroid)" +msgstr "" + +#: src/changelog/v2.15.md:45 src/changelog/v2.15.md:58 +msgid "🔥 Hot fixes for 2.15.0 issues (See below for 2.15.0 notes 👇 it was a huge release!)" +msgstr "" + +#: src/changelog/v2.15.md:46 +msgid "2.15 should have no regressions now we think 🤞 " +msgstr "" + +#: src/changelog/v2.15.md:47 +msgid "That means we'll slow down the releases and these popups now, sorry + thank you " +msgstr "" + +#: src/changelog/v2.15.md:48 +msgid "Fix another API issue breaking card add from external apps" +msgstr "" + +#: src/changelog/v2.15.md:49 +msgid "Fix conditional template issue that caused blank cards for some" +msgstr "" + +#: src/changelog/v2.15.md:50 +msgid "Fix auto-advance ignoring \"no advance\" setting if card had audio" +msgstr "" + +#: src/changelog/v2.15.md:51 +msgid "Gracefully handle corrupt collections with invalid current decks selected" +msgstr "" + +#: src/changelog/v2.15.md:52 +msgid "Publish to Amazon App Store again (go get AnkiDroid on your Fire devices!)" +msgstr "" + +#: src/changelog/v2.15.md:53 +msgid "[Issue tracker milestone here](https://github.com/ankidroid/Anki-Android/milestone/44?closed=1)" +msgstr "" + +#: src/changelog/v2.15.md:56 +msgid "Version 2.15.1 (20210525)" +msgstr "" + +#: src/changelog/v2.15.md:57 +msgid "[❤️ Your donations funded this rapid set of fixes, enjoy! ❤️](https://opencollective.com/ankidroid)" +msgstr "" + +#: src/changelog/v2.15.md:59 +msgid "Do not auto-update users to scheduler v2. Yet." +msgstr "" + +#: src/changelog/v2.15.md:60 +msgid "Fix crash on undo after deck delete" +msgstr "" + +#: src/changelog/v2.15.md:61 +msgid "Try harder to successfully paste images" +msgstr "" + +#: src/changelog/v2.15.md:62 +msgid "Reviewer performance fix - only load mathjax if needed" +msgstr "" + +#: src/changelog/v2.15.md:63 +msgid "Fixed compatibility issue for 2.15 collections on 2.14" +msgstr "" + +#: src/changelog/v2.15.md:64 +msgid "Fixed API issue breaking card add from external apps" +msgstr "" + +#: src/changelog/v2.15.md:65 +msgid "Fresh language translations. See a bad translation? [You can fix it easily!](https://crowdin.com/project/ankidroid)" +msgstr "" + +#: src/changelog/v2.15.md:66 +msgid "[Detailed issue log](https://github.com/ankidroid/Anki-Android/milestone/43?closed=1)" +msgstr "" + +#: src/changelog/v2.15.md:68 +msgid "Version 2.15.0 (20210524)" +msgstr "" + +#: src/changelog/v2.15.md:69 +msgid "[❤️ Your donations funded these features, enjoy! ❤️](https://opencollective.com/ankidroid)" +msgstr "" + +#: src/changelog/v2.15.md:70 +msgid "Thanks to [Google Summer of Code](https://github.com/ankidroid/Anki-Android/wiki/Google-Summer-of-Code-2021) students for a HUGE effort!" +msgstr "" + +#: src/changelog/v2.15.md:71 +msgid "Way too many changes to describe, but here are the highlights:" +msgstr "" + +#: src/changelog/v2.15.md:72 +msgid "New timezone code supported for sync with AnkiDesktop!" +msgstr "" + +#: src/changelog/v2.15.md:73 +msgid "Performance, stability improvements everywhere" +msgstr "" + +#: src/changelog/v2.15.md:74 +msgid "General UI improvements (accessibility, dark mode, design, more)" +msgstr "" + +#: src/changelog/v2.15.md:75 +msgid "Many new keyboard shortcuts and gesture actions" +msgstr "" + +#: src/changelog/v2.15.md:76 +msgid "Languages: Added Odia, Malayalam; big RTL support improvements!" +msgstr "" + +#: src/changelog/v2.15.md:77 +msgid "Reviewer: Javascript API: many new methods" +msgstr "" + +#: src/changelog/v2.15.md:78 +msgid "Improved account login, sync conflict, card template UI" +msgstr "" + +#: src/changelog/v2.15.md:79 +msgid "Tags and Decks dialogs have search!" +msgstr "" + +#: src/changelog/v2.15.md:80 +msgid "Whiteboard: erase, pen colors, stroke width" +msgstr "" + +#: src/changelog/v2.15.md:81 +msgid "NoteEditor: Mathjax 3, capitalize sentences setting" +msgstr "" + +#: src/changelog/v2.15.md:82 +msgid "Huge quality improvements all over codebase, helps future developers" +msgstr "" + +#: src/changelog/v2.15.md:83 +msgid "[🚧 Full 638 item changelog here! 🚧](https://github.com/ankidroid/Anki-Android/milestone/37?closed=1)" +msgstr "" + +#: src/changelog/v2.14.md:1 +msgid "Version 2.14.6 (20210309)" +msgstr "" + +#: src/changelog/v2.14.md:2 +msgid "Reviewer: fix \"my card is blank now with 2.14.5! help!\" 😱" +msgstr "" + +#: src/changelog/v2.14.md:3 +msgid "Reviewer: fix Android 8/8.1 review buttons disappear (finally?)" +msgstr "" + +#: src/changelog/v2.14.md:5 +msgid "Version 2.14.5 (20210307)" +msgstr "" + +#: src/changelog/v2.14.md:6 +msgid "We really appreciate the [donations](https://opencollective.com/ankidroid), they paid for these fixes 🤝" +msgstr "" + +#: src/changelog/v2.14.md:7 +msgid "NoteEditor: Android 11 users can crop!" +msgstr "" + +#: src/changelog/v2.14.md:8 +msgid "NoteEditor: Canceling crop twice won't delete your image" +msgstr "" + +#: src/changelog/v2.14.md:9 +msgid "DeckList: parent limits altered to match Desktop" +msgstr "" + +#: src/changelog/v2.14.md:10 +msgid "DeckList: current deck saved as correct type" +msgstr "" + +#: src/changelog/v2.14.md:11 +msgid "SchedulerV2: allow very small delays" +msgstr "" + +#: src/changelog/v2.14.md:12 +msgid "KNOWN ISSUE: [Android 8/8.1 answer buttons disappear](https://github.com/ankidroid/Anki-Android/issues/7369). Use gestures as workaround." +msgstr "" + +#: src/changelog/v2.14.md:13 +msgid "Anyone with Android 8/8.1 that reproduces this and knows how to develop Android layouts? We'd love the help!" +msgstr "" + +#: src/changelog/v2.14.md:15 +msgid "Version 2.14.4 (20210307)" +msgstr "" + +#: src/changelog/v2.14.md:16 +msgid "Re-released immediately as 2.14.5 after release script issue 🤷😅" +msgstr "" + +#: src/changelog/v2.14.md:18 +msgid "Version 2.14.3 (20210109)" +msgstr "" + +#: src/changelog/v2.14.md:19 +msgid "[The AnKing](https://www.youtube.com/c/TheAnKing) has graced us with a [new intro video](https://youtu.be/iuBU_OM9oAM)! 🤓" +msgstr "" + +#: src/changelog/v2.14.md:20 +msgid "Still happily overwhelmed by the [donations](https://opencollective.com/ankidroid) 💪" +msgstr "" + +#: src/changelog/v2.14.md:21 +msgid "Reviewer: Fix mark note keyboard shortcut" +msgstr "" + +#: src/changelog/v2.14.md:22 +msgid "NoteEditor: Fix to remove padding if removing formatting toolbar" +msgstr "" + +#: src/changelog/v2.14.md:23 +msgid "Previewer: Fix to show same card after edit" +msgstr "" + +#: src/changelog/v2.14.md:24 +msgid "Scheduler: Fix v1 scheduler completes deck when only learn cards due" +msgstr "" + +#: src/changelog/v2.14.md:26 +msgid "Version 2.14.2 (20201202)" +msgstr "" + +#: src/changelog/v2.14.md:27 +msgid "Wow! We are humbled by the [donations](https://opencollective.com/ankidroid) 🤯" +msgstr "" + +#: src/changelog/v2.14.md:28 +msgid "The resources are already going to contributors to improve the app! Thank you ❤️ " +msgstr "" + +#: src/changelog/v2.14.md:29 +msgid "Note Editor: Fix image crop not working first time" +msgstr "" + +#: src/changelog/v2.14.md:30 +msgid "Note Editor: Paste image at cursor not end" +msgstr "" + +#: src/changelog/v2.14.md:31 +msgid "Note Editor: Fix Ctrl+C opens preview" +msgstr "" + +#: src/changelog/v2.14.md:32 +msgid "Note Editor: Add menubar toggle to disable editing toolbar" +msgstr "" + +#: src/changelog/v2.14.md:33 +msgid "Home Screen: Fix Vivo device shortcut creation (again)" +msgstr "" + +#: src/changelog/v2.14.md:34 +msgid "Reviewer: Fix numeric keypad not working" +msgstr "" + +#: src/changelog/v2.14.md:35 +msgid "Note Editor: Fix cloze cards going to wrong deck" +msgstr "" + +#: src/changelog/v2.14.md:36 +msgid "Navigation Menu: Fix safe display app hang" +msgstr "" + +#: src/changelog/v2.14.md:37 +msgid "Preferences: Fix gestures menu translation / ordering issue" +msgstr "" + +#: src/changelog/v2.14.md:38 +msgid "Translations: thanks [translators!](https://crowdin.com/project/ankidroid/activity_stream) - you can help too!" +msgstr "" + +#: src/changelog/v2.14.md:39 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/39?closed=1)" +msgstr "" + +#: src/changelog/v2.14.md:41 +msgid "Version 2.14.1 (2020-11-23)" +msgstr "" + +#: src/changelog/v2.14.md:42 +msgid "Always free, always open source, but you may [donate if you like 😊](https://opencollective.com/ankidroid)" +msgstr "" + +#: src/changelog/v2.14.md:43 +msgid "Move sync button to right of action bar (vs search)" +msgstr "" + +#: src/changelog/v2.14.md:44 +msgid "Fix duplicate note detection" +msgstr "" + +#: src/changelog/v2.14.md:45 +msgid "Fix add deck shortcut on Vivo devices" +msgstr "" + +#: src/changelog/v2.14.md:46 +msgid "Fix non-translatable 'Card Info' strings" +msgstr "" + +#: src/changelog/v2.14.md:47 +msgid "Fix suspended card handling in filtered decks" +msgstr "" + +#: src/changelog/v2.14.md:48 +msgid "Sync translations from volunteers on our crowdin.com site (thank you!)" +msgstr "" + +#: src/changelog/v2.14.md:49 +msgid "Fix crash on mismatched WebView ABIs" +msgstr "" + +#: src/changelog/v2.14.md:50 +msgid "Fix crash invalid filename handling while pasting image" +msgstr "" + +#: src/changelog/v2.14.md:51 +msgid "Fix crash selecting cards in card browser" +msgstr "" + +#: src/changelog/v2.14.md:52 +msgid "Fix crash Android 8 in card browser" +msgstr "" + +#: src/changelog/v2.14.md:53 +msgid "Fix crash in undo labeling" +msgstr "" + +#: src/changelog/v2.14.md:54 +msgid "Fix crash reset password when system browser not exported" +msgstr "" + +#: src/changelog/v2.14.md:55 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/38?closed=1)" +msgstr "" + +#: src/changelog/v2.14.md:57 +msgid "Version 2.14.0 (2020-11-18)" +msgstr "" + +#: src/changelog/v2.14.md:58 +msgid "Enabled Donations - we ❤️ you, [now you can ❤️ us 😊](https://opencollective.com/ankidroid)" +msgstr "" + +#: src/changelog/v2.14.md:59 +msgid "New Screen: Card Info (from Card Browser or as a Reviewer App Bar Button)" +msgstr "" + +#: src/changelog/v2.14.md:60 +msgid "New Screen: Help - easy access to manual, many community pages/manuals, donation page, translations" +msgstr "" + +#: src/changelog/v2.14.md:61 +msgid "Home screen: Add deck shortcut" +msgstr "" + +#: src/changelog/v2.14.md:62 +msgid "Deck Options: SchedV2: Support setting \"Hard Factor\" " +msgstr "" + +#: src/changelog/v2.14.md:63 +msgid "Card Browser: Add deck filtering" +msgstr "" + +#: src/changelog/v2.14.md:64 +msgid "Card Browser: Filter By Flag" +msgstr "" + +#: src/changelog/v2.14.md:65 +msgid "Card Browser: Adding cards defaults to selected deck" +msgstr "" + +#: src/changelog/v2.14.md:66 +msgid "Card Browser: Many more keyboard shortcuts" +msgstr "" + +#: src/changelog/v2.14.md:67 +msgid "Card Browser: Display the number of cards deleted when deleting a note" +msgstr "" + +#: src/changelog/v2.14.md:68 +msgid "Card Browser: Better handling of deck searches containing wildcards" +msgstr "" + +#: src/changelog/v2.14.md:69 +msgid "Reviewer: Basic Android TV Support" +msgstr "" + +#: src/changelog/v2.14.md:70 +msgid "Reviewer: New Gesture: Abort Learning & Sync" +msgstr "" + +#: src/changelog/v2.14.md:71 +msgid "Reviewer: Support AnkiMobile 9-area gesture touch layout" +msgstr "" + +#: src/changelog/v2.14.md:72 +msgid "Reviewer: Improve \"Empty Card\" UX" +msgstr "" + +#: src/changelog/v2.14.md:73 +msgid "Reviewer: Keyboard shortcuts for flags (Ctrl+1...4)" +msgstr "" + +#: src/changelog/v2.14.md:74 +msgid "Note Editor: Editor Toolbar (& keyboard shortcuts) - hugely requested feature!" +msgstr "" + +#: src/changelog/v2.14.md:75 +msgid "Note Editor Toolbar: Apply Custom Commands (& keyboard shortcuts)" +msgstr "" + +#: src/changelog/v2.14.md:76 +msgid "Note Editor: Paste to Insert Image" +msgstr "" + +#: src/changelog/v2.14.md:77 +msgid "Note Editor: Made fields full-width" +msgstr "" + +#: src/changelog/v2.14.md:78 +msgid "Note Editor: Change Font Size for fields" +msgstr "" + +#: src/changelog/v2.14.md:79 +msgid "Note Editor: Expand/Collapse Fields" +msgstr "" + +#: src/changelog/v2.14.md:80 +msgid "Note Editor: Clear Field button" +msgstr "" + +#: src/changelog/v2.14.md:81 +msgid "Note Editor: Ctrl+Shift+Num to switch fields" +msgstr "" + +#: src/changelog/v2.14.md:82 +msgid "Note Editor: Improved image addition / naming" +msgstr "" + +#: src/changelog/v2.14.md:83 +msgid "Note Editor: Add preference to convert newline to HTML (or not)" +msgstr "" + +#: src/changelog/v2.14.md:84 +msgid "OS Integration: Default to \"Anki Card\" in system context menu vs \"Card Browser\"" +msgstr "" + +#: src/changelog/v2.14.md:85 +msgid "Libanki: Add FileUpload API" +msgstr "" + +#: src/changelog/v2.14.md:86 +msgid "Translations: Tagged screenshots on crowdin.com to help our translators" +msgstr "" + +#: src/changelog/v2.14.md:87 +msgid "Stability: Fix rare crashes (down to ~50/day total w/1.8million installs!)" +msgstr "" + +#: src/changelog/v2.14.md:88 +msgid "Performance: massive number of speedups" +msgstr "" + +#: src/changelog/v2.14.md:89 +msgid "Dev: Massively sped up AnkiDroid builds and improved code readability" +msgstr "" + +#: src/changelog/v2.14.md:90 +msgid "Totals: 345 code changes and hundreds of translations, made by volunteers, in 2 months" +msgstr "" + +#: src/changelog/v2.14.md:91 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/30?closed=1)" +msgstr "" + +#: src/changelog/v2.13.md:1 +msgid "Version 2.13.5 (2020-10-03)" +msgstr "" + +#: src/changelog/v2.13.md:2 +msgid "Fix performance for fast (\\<1s) answers in review" +msgstr "" + +#: src/changelog/v2.13.md:3 +msgid "Add links to new Arabic help/manual translation" +msgstr "" + +#: src/changelog/v2.13.md:4 +msgid "Add back button handling to changelog display" +msgstr "" + +#: src/changelog/v2.13.md:5 +msgid "Add rate button to changelog" +msgstr "" + +#: src/changelog/v2.13.md:6 +msgid "Add warning message to handle future db upgrades" +msgstr "" + +#: src/changelog/v2.13.md:7 +msgid "Sync all translations from our volunteer translators (thanks everyone!)" +msgstr "" + +#: src/changelog/v2.13.md:9 +msgid "Version 2.13.4 (2020-09-29)" +msgstr "" + +#: src/changelog/v2.13.md:10 +msgid "Fix crash showing TagsDialog" +msgstr "" + +#: src/changelog/v2.13.md:11 +msgid "Fix crash in gesture detection" +msgstr "" + +#: src/changelog/v2.13.md:12 +msgid "Improve import interrupted error message" +msgstr "" + +#: src/changelog/v2.13.md:13 +msgid "Fix scheduler counts after undo" +msgstr "" + +#: src/changelog/v2.13.md:14 +msgid "Fix Card Browser preview after sort" +msgstr "" + +#: src/changelog/v2.13.md:15 +msgid "Fix button display if answer animation incomplete" +msgstr "" + +#: src/changelog/v2.13.md:16 +msgid "Sync all translations" +msgstr "" + +#: src/changelog/v2.13.md:18 +msgid "Version 2.13.3 (2020-09-23)" +msgstr "" + +#: src/changelog/v2.13.md:19 +msgid "Fix double-clicking answer buttons skipping cards" +msgstr "" + +#: src/changelog/v2.13.md:20 +msgid "Change missing media warning to twice-per-session not twice-per-deck" +msgstr "" + +#: src/changelog/v2.13.md:21 +msgid "Change answer button fade on open" +msgstr "" + +#: src/changelog/v2.13.md:22 +msgid "Updated all translations from volunteer crowdin.com site up to 20200923" +msgstr "" + +#: src/changelog/v2.13.md:24 +msgid "Version 2.13.2 (2020-09-19)" +msgstr "" + +#: src/changelog/v2.13.md:25 +msgid "Fix Crash rare on Card Browser exit" +msgstr "" + +#: src/changelog/v2.13.md:26 +msgid "Fix Crash Android 4.4" +msgstr "" + +#: src/changelog/v2.13.md:27 +msgid "Fix Open Deck failures / improve related messaging" +msgstr "" + +#: src/changelog/v2.13.md:28 +msgid "Fix messaging for Xioami cloze workaround" +msgstr "" + +#: src/changelog/v2.13.md:29 +msgid "Move \"set field language\" after share on Note Editor context menu" +msgstr "" + +#: src/changelog/v2.13.md:31 +msgid "Version 2.13.1 (2020-09-17)" +msgstr "" + +#: src/changelog/v2.13.md:32 +msgid "Add cloze via clipboard paste workaround on MIUI/Xiaomi devices" +msgstr "" + +#: src/changelog/v2.13.md:33 +msgid "Fix Navigation drawer respects safe display / disable animations preference" +msgstr "" + +#: src/changelog/v2.13.md:34 +msgid "Fix Reviewer buttons respect safe display / disable animations preference" +msgstr "" + +#: src/changelog/v2.13.md:35 +msgid "Fix Deck Picker bottom bar opacity" +msgstr "" + +#: src/changelog/v2.13.md:36 +msgid "Fix Error message about missing content on cards" +msgstr "" + +#: src/changelog/v2.13.md:37 +msgid "Fix crash selecting deck that disappears during sync" +msgstr "" + +#: src/changelog/v2.13.md:39 +msgid "Version 2.13.0 (2020-09-15)" +msgstr "" + +#: src/changelog/v2.13.md:40 +msgid "Field tag (such as \"{{Front}}\") appearing in a note's field will be shown as-is in cards." +msgstr "" + +#: src/changelog/v2.13.md:41 +msgid "Add Sync icon badge when changes are pending sync (can be disabled in options)" +msgstr "" + +#: src/changelog/v2.13.md:42 +msgid "Add Edit Note from card Preview while in Card Browser" +msgstr "" + +#: src/changelog/v2.13.md:43 +msgid "Add \"Anki Card\" to system context menu (like \"Card Browser\") - disabled by default" +msgstr "" + +#: src/changelog/v2.13.md:44 +msgid "Add Set keyboard language for specific fields in the note editor (example: one field Japanese, other field Portuguese for input)." +msgstr "" + +#: src/changelog/v2.13.md:45 +msgid "Add Keep keyboard open after adding a note" +msgstr "" + +#: src/changelog/v2.13.md:46 +msgid "Add Card properties available in JavaScript API" +msgstr "" + +#: src/changelog/v2.13.md:47 +msgid "Add JavaScript API versioning for scripts (basis for future plugins)" +msgstr "" + +#: src/changelog/v2.13.md:48 +msgid "Add Auto-Login when selecting saved user account" +msgstr "" + +#: src/changelog/v2.13.md:49 +msgid "Add Allow import of collection.anki21 files when under SchedV1" +msgstr "" + +#: src/changelog/v2.13.md:50 +msgid "Add New screen for first-time users" +msgstr "" + +#: src/changelog/v2.13.md:51 +msgid "Add Button animations when answering cards" +msgstr "" + +#: src/changelog/v2.13.md:52 +msgid "Add Note Editor: Add shortcuts Ctrl+(Alt)+Shift+C to add a cloze." +msgstr "" + +#: src/changelog/v2.13.md:53 +msgid "Fix Some cards in learning were not shown at the right time (Only if you undo/bury/suspend/reset/reschedule and the next card goes to learning mode)" +msgstr "" + +#: src/changelog/v2.13.md:54 +msgid "Fix Selected deck has translucent background if a deck picker background is set" +msgstr "" + +#: src/changelog/v2.13.md:55 +msgid "Fix Improved preview screens" +msgstr "" + +#: src/changelog/v2.13.md:56 +msgid "Fix Better accessibility in Deck Browser for partially sighted users" +msgstr "" + +#: src/changelog/v2.13.md:57 +msgid "Fix Improve visibility of \"Add/Remove Option Group\"" +msgstr "" + +#: src/changelog/v2.13.md:58 +msgid "Fix Improved messages for sync rate limiting error" +msgstr "" + +#: src/changelog/v2.13.md:59 +msgid "Fix Improved messages for reducing study limits" +msgstr "" + +#: src/changelog/v2.13.md:60 +msgid "Fix Improved messaging when collection is missing media" +msgstr "" + +#: src/changelog/v2.13.md:61 +msgid "Fix Improve feedback when accessing Debug Info" +msgstr "" + +#: src/changelog/v2.13.md:62 +msgid "Fix Add additional warnings to reschedule dialog" +msgstr "" + +#: src/changelog/v2.13.md:63 +msgid "Fix Whiteboard pen color can be disabled by pressing icon again" +msgstr "" + +#: src/changelog/v2.13.md:64 +msgid "Fix Ensure all menu items in the reviewer can be customized by \"App Bar Buttons\" setting" +msgstr "" + +#: src/changelog/v2.13.md:65 +msgid "Fix Scheduler discrepancy handling early interval on filtered decks" +msgstr "" + +#: src/changelog/v2.13.md:66 +msgid "Fix Exports work when cards are missing media" +msgstr "" + +#: src/changelog/v2.13.md:67 +msgid "Fix Crash due to logging." +msgstr "" + +#: src/changelog/v2.13.md:68 +msgid "Fix Toasts used to show one more card than the number of card actually reviewed during the time box" +msgstr "" + +#: src/changelog/v2.13.md:69 +msgid "Fix Handle newlines properly in Note Editor Preview" +msgstr "" + +#: src/changelog/v2.13.md:70 +msgid "Fix Improve AnkiDroid opening animation" +msgstr "" + +#: src/changelog/v2.13.md:71 +msgid "Fix Show correct answer button when answering via Keyboard" +msgstr "" + +#: src/changelog/v2.13.md:72 +msgid "Fix \"New Cards Added\" Statistic" +msgstr "" + +#: src/changelog/v2.13.md:73 +msgid "Fix Crash when inserting a cloze when selecting text from right-to-left via keyboard" +msgstr "" + +#: src/changelog/v2.13.md:74 +msgid "Fix \"Show Password\" icon revealing saved password" +msgstr "" + +#: src/changelog/v2.13.md:75 +msgid "Fix Card browser still contains card after the app goes into background" +msgstr "" + +#: src/changelog/v2.13.md:76 +msgid "Fix Daily unbury occurs during sync if necessary" +msgstr "" + +#: src/changelog/v2.13.md:77 +msgid "Fix On big screen, buttons moved during loading" +msgstr "" + +#: src/changelog/v2.13.md:78 +msgid "Translators If some text change because of minor changes (typos) you won't have to translate it again" +msgstr "" + +#: src/changelog/v2.13.md:79 +msgid "Performance improvements (specifically: initial loading of large collection (lot of decks, note type, card type, fields, long templates...), card browser, deck picker startup, next card view, undo, cancelling tasks such as computing a list of card in browser)" +msgstr "" + +#: src/changelog/v2.13.md:80 +msgid "Dev: Massive dev workflow improvements and automated checks for our translations." +msgstr "" + +#: src/changelog/v2.13.md:81 +msgid "Dev: Implement backend for CSV Importer" +msgstr "" + +#: src/changelog/v2.13.md:82 +msgid "Dev: Improve crash reporting on app startup" +msgstr "" + +#: src/changelog/v2.13.md:83 +msgid "Dev: Massive improvement in testing, especially around scheduler / card queue behavior" +msgstr "" + +#: src/changelog/v2.13.md:84 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/27?closed=1)" +msgstr "" + +#: src/changelog/v2.12.md:1 +msgid "Version 2.12.1 (2020-07-21)" +msgstr "" + +#: src/changelog/v2.12.md:2 +msgid "Fix bug previewing edited notes after changing field count" +msgstr "" + +#: src/changelog/v2.12.md:3 +msgid "Fix crash previewing edited notes from dynamic decks" +msgstr "" + +#: src/changelog/v2.12.md:4 +msgid "Fix crash restarting app after a crash" +msgstr "" + +#: src/changelog/v2.12.md:5 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/28?closed=1)" +msgstr "" + +#: src/changelog/v2.12.md:7 +msgid "Version 2.12.0 (2020-07-18)" +msgstr "" + +#: src/changelog/v2.12.md:8 +msgid "Add Crop image feature" +msgstr "" + +#: src/changelog/v2.12.md:9 +msgid "Add Preview in note editor" +msgstr "" + +#: src/changelog/v2.12.md:10 +msgid "Add edit tags in reviewer" +msgstr "" + +#: src/changelog/v2.12.md:11 +msgid "Add volume buttons as gestures" +msgstr "" + +#: src/changelog/v2.12.md:12 +msgid "Add whiteboard pen color" +msgstr "" + +#: src/changelog/v2.12.md:13 +msgid "Add microphone tool bar in reviewer" +msgstr "" + +#: src/changelog/v2.12.md:14 +msgid "Add javascript API (check the Wiki!)" +msgstr "" + +#: src/changelog/v2.12.md:15 +msgid "Improve: app is 3MB smaller" +msgstr "" + +#: src/changelog/v2.12.md:16 +msgid "Fix: show whole tag in tags dialog" +msgstr "" + +#: src/changelog/v2.12.md:17 +msgid "Fix copy note copies tags too" +msgstr "" + +#: src/changelog/v2.12.md:18 +msgid "Fix data corruption canceling template edits" +msgstr "" + +#: src/changelog/v2.12.md:19 +msgid "performance and bug fixes everywhere!" +msgstr "" + +#: src/changelog/v2.12.md:21 +msgid "11 volunteers made hundreds of individual changes this release" +msgstr "" + +#: src/changelog/v2.12.md:23 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/18?closed=1)" +msgstr "" + +#: src/changelog/v2.11.md:1 +msgid "Version 2.11.3 (2020-06-17)" +msgstr "" + +#: src/changelog/v2.11.md:2 +msgid "Fix out-of-memory errors when importing very large decks" +msgstr "" + +#: src/changelog/v2.11.md:3 +msgid "Fix incorrect out-of-space message on import in Android 4" +msgstr "" + +#: src/changelog/v2.11.md:4 +msgid "Fix crash if card viewer closed quickly after view" +msgstr "" + +#: src/changelog/v2.11.md:5 +msgid "Fix unzip fail on .apkg files >2GB" +msgstr "" + +#: src/changelog/v2.11.md:6 +msgid "Fix crash on edit note in browser multi-select" +msgstr "" + +#: src/changelog/v2.11.md:8 +msgid "Version 2.11.2 (2020-06-10)" +msgstr "" + +#: src/changelog/v2.11.md:9 +msgid "Add santali language" +msgstr "" + +#: src/changelog/v2.11.md:10 +msgid "Fix Hebrew, Indonesian, Tagalog languages" +msgstr "" + +#: src/changelog/v2.11.md:11 +msgid "Improve error reporting around apkg import failures" +msgstr "" + +#: src/changelog/v2.11.md:12 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/24?closed=1)" +msgstr "" + +#: src/changelog/v2.11.md:14 +msgid "Version 2.11.1 (2020-06-08)" +msgstr "" + +#: src/changelog/v2.11.md:15 +msgid "Fix crash in Card Browser multi-select mode" +msgstr "" + +#: src/changelog/v2.11.md:16 +msgid "Fix Custom Steps interval dialog space entry issue" +msgstr "" + +#: src/changelog/v2.11.md:17 +msgid "Fix flags don't export with deck" +msgstr "" + +#: src/changelog/v2.11.md:18 +msgid "Fix AnkiDroid API doesn't handle null model id (Anki Compatibility workaround)" +msgstr "" + +#: src/changelog/v2.11.md:19 +msgid "Fix translation crash in sync dialog in Azerbaijani" +msgstr "" + +#: src/changelog/v2.11.md:20 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/23?closed=1)" +msgstr "" + +#: src/changelog/v2.11.md:22 +msgid "Version 2.11.0 (2020-06-05)" +msgstr "" + +#: src/changelog/v2.11.md:23 +msgid "Android minimum supported version is now 4.1 / Jelly Bean / API16 (AnkiWeb Compatibility)" +msgstr "" + +#: src/changelog/v2.11.md:24 +msgid "Change sibling burying should default to off (Anki Compatibility)" +msgstr "" + +#: src/changelog/v2.11.md:25 +msgid "Change learn cards do not go in filtered decks in v1 sched (Anki Compatibility)" +msgstr "" + +#: src/changelog/v2.11.md:26 +msgid "Add Browser Appearance screen, to edit Card Browser render format (Anki Compatibility)" +msgstr "" + +#: src/changelog/v2.11.md:27 +msgid "Add guidance in Note Editor if no cards will be generated despite full fields" +msgstr "" + +#: src/changelog/v2.11.md:28 +msgid "Add all translations from our crowdin.com translation site" +msgstr "" + +#: src/changelog/v2.11.md:29 +msgid "Add ability to decrease daily limit in custom study (Anki Compatibility)" +msgstr "" + +#: src/changelog/v2.11.md:30 +msgid "Add ability to block gesture handling when tapping hints in Reviewer" +msgstr "" + +#: src/changelog/v2.11.md:31 +msgid "Add create subdeck option in deck list long-press context menu" +msgstr "" + +#: src/changelog/v2.11.md:32 +msgid "Add edit note action in Card Browser multi-select mode" +msgstr "" + +#: src/changelog/v2.11.md:33 +msgid "Add ability to turn off 'Card Browser' system text context menu item" +msgstr "" + +#: src/changelog/v2.11.md:34 +msgid "Add nightMode CSS selector for card HTML (Anki Compatibility)" +msgstr "" + +#: src/changelog/v2.11.md:35 +msgid "Add ability to change just the case of a deck name" +msgstr "" + +#: src/changelog/v2.11.md:36 +msgid "Add page-up/page-down gestures" +msgstr "" + +#: src/changelog/v2.11.md:37 +msgid "Improve gesture handling in full-screen / immersive mode" +msgstr "" + +#: src/changelog/v2.11.md:38 +msgid "Improve handling of cloze deletion in TTS mode" +msgstr "" + +#: src/changelog/v2.11.md:39 +msgid "Improve Card Browser search from Android text selection menu" +msgstr "" + +#: src/changelog/v2.11.md:40 +msgid "Improve Card Browser with default hide of media filenames" +msgstr "" + +#: src/changelog/v2.11.md:41 +msgid "Improve Reviewer auto-advance by waiting for TTS to finish" +msgstr "" + +#: src/changelog/v2.11.md:42 +msgid "Improve transparent SVG display in night mode with white background" +msgstr "" + +#: src/changelog/v2.11.md:43 +msgid "Improve anki package import handling" +msgstr "" + +#: src/changelog/v2.11.md:44 +msgid "Improve AnkiWeb login form enter button handling" +msgstr "" + +#: src/changelog/v2.11.md:45 +msgid "Improve hardware back button handling in restore from backup" +msgstr "" + +#: src/changelog/v2.11.md:46 +msgid "Improve Reviewer display of un-rendered LaTeX" +msgstr "" + +#: src/changelog/v2.11.md:47 +msgid "Improve TTS / auto-answer combination, wait for TTS before advance" +msgstr "" + +#: src/changelog/v2.11.md:48 +msgid "Workaround Firefox open downloaded deck bug" +msgstr "" + +#: src/changelog/v2.11.md:49 +msgid "Workaround crash on Samsung devices with >500 deck reminders" +msgstr "" + +#: src/changelog/v2.11.md:50 +msgid "Fix card template editor mistakenly allowing add template on cloze type" +msgstr "" + +#: src/changelog/v2.11.md:51 +msgid "Fix language change preference" +msgstr "" + +#: src/changelog/v2.11.md:52 +msgid "Fix ability to unbury a deck in deck list" +msgstr "" + +#: src/changelog/v2.11.md:53 +msgid "Fix app bar item flicker during review" +msgstr "" + +#: src/changelog/v2.11.md:54 +msgid "Fix V2 scheduler learning card count after undo" +msgstr "" + +#: src/changelog/v2.11.md:55 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/13?closed=1)" +msgstr "" + +#: src/changelog/v2.10.md:1 +msgid "Version 2.10.4 (2020-05-31)" +msgstr "" + +#: src/changelog/v2.10.md:2 +msgid "Workaround expired AnkiWeb SSL Root certificate" +msgstr "" + +#: src/changelog/v2.10.md:3 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/22?closed=1)" +msgstr "" + +#: src/changelog/v2.10.md:5 +msgid "Version 2.10.3 (2020-05-29)" +msgstr "" + +#: src/changelog/v2.10.md:6 +msgid "Fix crash on no permissions on Card Browser system text menu entry" +msgstr "" + +#: src/changelog/v2.10.md:7 +msgid "Fix crash in widget if external storage unmounts" +msgstr "" + +#: src/changelog/v2.10.md:8 +msgid "Fix crash on device reboot if no permissions" +msgstr "" + +#: src/changelog/v2.10.md:9 +msgid "Fix crash if deck picker background image too large" +msgstr "" + +#: src/changelog/v2.10.md:10 +msgid "Fix crash in tags dialog" +msgstr "" + +#: src/changelog/v2.10.md:11 +msgid "Fix bad data generated for null objects (Anki compatibility)" +msgstr "" + +#: src/changelog/v2.10.md:12 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/21?closed=1)" +msgstr "" + +#: src/changelog/v2.10.md:14 +msgid "Version 2.10.2 (2020-05-14)" +msgstr "" + +#: src/changelog/v2.10.md:15 +msgid "Fix type answer cards not rendering correctly" +msgstr "" + +#: src/changelog/v2.10.md:16 +msgid "Fix type answer card template creation on non-English new installs" +msgstr "" + +#: src/changelog/v2.10.md:17 +msgid "Fix frequent full sync caused by incorrect learning card counts" +msgstr "" + +#: src/changelog/v2.10.md:18 +msgid "Fix crash importing into fresh install with no storage permission" +msgstr "" + +#: src/changelog/v2.10.md:20 +msgid "Version 2.10.1 (2020-05-13)" +msgstr "" + +#: src/changelog/v2.10.md:21 +msgid "Updated all translations from crowdin translators" +msgstr "" + +#: src/changelog/v2.10.md:22 +msgid "Fix crash note editor on rapid back button" +msgstr "" + +#: src/changelog/v2.10.md:23 +msgid "Fix crash from incorrect Thai translation" +msgstr "" + +#: src/changelog/v2.10.md:25 +msgid "Version 2.10 (2020-05-12)" +msgstr "" + +#: src/changelog/v2.10.md:26 +msgid "Add welcome dialog explaining need for storage permission" +msgstr "" + +#: src/changelog/v2.10.md:27 +msgid "Add support for Flags on cards (including flagging by gesture)" +msgstr "" + +#: src/changelog/v2.10.md:28 +msgid "Add ability to set background image in Deck Picker" +msgstr "" + +#: src/changelog/v2.10.md:29 +msgid "Add localization of standard templates created in fresh install" +msgstr "" + +#: src/changelog/v2.10.md:30 +msgid "Add support for card javascript to reload current card programmatically" +msgstr "" + +#: src/changelog/v2.10.md:31 +msgid "Add support for restricted learning / classroom devices" +msgstr "" + +#: src/changelog/v2.10.md:32 +msgid "Add preference to disable \"Extended Text UI\" full-screen editor" +msgstr "" + +#: src/changelog/v2.10.md:33 +msgid "Add CSS style capability to heavy checkmark and down arrow in card" +msgstr "" + +#: src/changelog/v2.10.md:34 +msgid "Add display of current interval on reschedule dialog" +msgstr "" + +#: src/changelog/v2.10.md:35 +msgid "Add support for card javascript to answer cards programmatically" +msgstr "" + +#: src/changelog/v2.10.md:36 +msgid "Add ability to toggle sticky field in field editor" +msgstr "" + +#: src/changelog/v2.10.md:37 +msgid "Improve deck list newline, style, script tag handling in deck descriptions" +msgstr "" + +#: src/changelog/v2.10.md:38 +msgid "Improve whiteboard on/off state handling, especially between day/night mode" +msgstr "" + +#: src/changelog/v2.10.md:39 +msgid "Improve multi-selection options in CardBrowser" +msgstr "" + +#: src/changelog/v2.10.md:40 +msgid "Improve performance (systematic optimization process, lots of improvements!)" +msgstr "" + +#: src/changelog/v2.10.md:41 +msgid "Improve handling of erroneous notes (missing fields, improper clozes)" +msgstr "" + +#: src/changelog/v2.10.md:42 +msgid "Improve user messaging on network connection failures" +msgstr "" + +#: src/changelog/v2.10.md:43 +msgid "Improve counting of suspended/buried cards in advanced statistics" +msgstr "" + +#: src/changelog/v2.10.md:44 +msgid "Improve v2 scheduler compatibility with Anki ecosystem" +msgstr "" + +#: src/changelog/v2.10.md:45 +msgid "Improve handling / detection of full sync need" +msgstr "" + +#: src/changelog/v2.10.md:46 +msgid "Improve Anki compatibility by allowing more field/model/deck name characters" +msgstr "" + +#: src/changelog/v2.10.md:47 +msgid "Improve deck list estimated review times with human scale times" +msgstr "" + +#: src/changelog/v2.10.md:48 +msgid "Fix text scaling bug in card browser" +msgstr "" + +#: src/changelog/v2.10.md:49 +msgid "Fix crash in export while using v2 scheduler" +msgstr "" + +#: src/changelog/v2.10.md:50 +msgid "Fix Custom Tabs crash with non-default system web browser" +msgstr "" + +#: src/changelog/v2.10.md:51 +msgid "Fix issues with import of packages with long Unicode names" +msgstr "" + +#: src/changelog/v2.10.md:52 +msgid "Fix incorrect intervals on lapsed filtered v2 scheduler cards" +msgstr "" + +#: src/changelog/v2.10.md:53 +msgid "Fix multimedia editor save/cancel behavior" +msgstr "" + +#: src/changelog/v2.10.md:54 +msgid "Fix incorrect button/gesture availability while existing task is still active" +msgstr "" + +#: src/changelog/v2.10.md:55 +msgid "Fix type answer crash on invalid characters" +msgstr "" + +#: src/changelog/v2.10.md:56 +msgid "Fix cloze references not being recognized in all fields" +msgstr "" + +#: src/changelog/v2.10.md:57 +msgid "Fix invalid ability to change deck to a filtered deck" +msgstr "" + +#: src/changelog/v2.10.md:58 +msgid "Fix crashes on adding invalid images, audios, and videos" +msgstr "" + +#: src/changelog/v2.10.md:59 +msgid "Fix CardBrowser crash after deleting card" +msgstr "" + +#: src/changelog/v2.10.md:60 +msgid "Fix crash and help user if no browser detected" +msgstr "" + +#: src/changelog/v2.10.md:61 +msgid "Fix Reviewer crash if card not available" +msgstr "" + +#: src/changelog/v2.10.md:62 +msgid "Fix crash / improve import of pasted decks" +msgstr "" + +#: src/changelog/v2.10.md:63 +msgid "Fix clicking hint field blocks key input in Reviewer" +msgstr "" + +#: src/changelog/v2.10.md:64 +msgid "Fix Previewer forgetting which card to show on device rotation" +msgstr "" + +#: src/changelog/v2.10.md:65 +msgid "Fix Mathjax/cloze interactions" +msgstr "" + +#: src/changelog/v2.10.md:66 +msgid "Fix vertical alignment of touch area in full-screen review" +msgstr "" + +#: src/changelog/v2.10.md:67 +msgid "Fix handling of ':::' in deck names" +msgstr "" + +#: src/changelog/v2.10.md:68 +msgid "Fix incorrect display of HTML comments in card browser" +msgstr "" + +#: src/changelog/v2.9.md:1 +msgid "Version 2.9.7 (2020-04-30)" +msgstr "" + +#: src/changelog/v2.9.md:2 +msgid "Fix crash / workaround deck options timer config regression in AnkiDesktop" +msgstr "" + +#: src/changelog/v2.9.md:4 +msgid "Version 2.9.6 (2020-04-03)" +msgstr "" + +#: src/changelog/v2.9.md:5 +msgid "Fix multimedia crashes (permissions handling, image add, preview)" +msgstr "" + +#: src/changelog/v2.9.md:6 +msgid "Fix UI and crashes in database check (user dialog + exception handling)" +msgstr "" + +#: src/changelog/v2.9.md:7 +msgid "Fix Windows 10 image compatibility issue with image paths" +msgstr "" + +#: src/changelog/v2.9.md:8 +msgid "Fix AnkiDesktop sync compatibility issue if more than 1000 cards due" +msgstr "" + +#: src/changelog/v2.9.md:9 +msgid "Fix crash in card browser render" +msgstr "" + +#: src/changelog/v2.9.md:10 +msgid "Fix parsing of image tags in card browser" +msgstr "" + +#: src/changelog/v2.9.md:11 +msgid "Fix crash in StudyOptionsFragment" +msgstr "" + +#: src/changelog/v2.9.md:12 +msgid "Fix issue with deck options group changing on export" +msgstr "" + +#: src/changelog/v2.9.md:13 +msgid "Fix issue with exports containing unexpected media" +msgstr "" + +#: src/changelog/v2.9.md:14 +msgid "Fix issue with dynamic decks (crash fix, export fix)" +msgstr "" + +#: src/changelog/v2.9.md:15 +msgid "Fix high frequency issue \"AnkiDroid directory is inaccessible\"" +msgstr "" + +#: src/changelog/v2.9.md:16 +msgid "Fix high frequency WebView (card viewer) crash" +msgstr "" + +#: src/changelog/v2.9.md:17 +msgid "Add columns to card browser (due, ease, changed, created, edited)" +msgstr "" + +#: src/changelog/v2.9.md:18 +msgid "Fix card scheduler not respecting maximum intervals" +msgstr "" + +#: src/changelog/v2.9.md:19 +msgid "Fix card browser spins forever on images or empty strings" +msgstr "" + +#: src/changelog/v2.9.md:21 +msgid "Version 2.9.5 (2020-03-15)" +msgstr "" + +#: src/changelog/v2.9.md:22 +msgid "Fix crash rendering card list while updating card browser search" +msgstr "" + +#: src/changelog/v2.9.md:23 +msgid "Fix case-sensitivity issue with pronunciation words not being found" +msgstr "" + +#: src/changelog/v2.9.md:24 +msgid "Fix crash caused by auto-sync on startup showing dialog too soon" +msgstr "" + +#: src/changelog/v2.9.md:25 +msgid "Fix crash on preview of TTS cards showing language selectiond dialog too slowly" +msgstr "" + +#: src/changelog/v2.9.md:26 +msgid "Fix crash on import if collection not found" +msgstr "" + +#: src/changelog/v2.9.md:27 +msgid "Fix Anki ecosystem deck configuration issue for Anki Desktop users \\<= 2.16" +msgstr "" + +#: src/changelog/v2.9.md:28 +msgid "Fix crash if user attempts to open camera or gallery and no app is available" +msgstr "" + +#: src/changelog/v2.9.md:29 +msgid "Fix crash building deck reminders while deck is synchronizing" +msgstr "" + +#: src/changelog/v2.9.md:30 +msgid "Fix crash related to audio recording stop" +msgstr "" + +#: src/changelog/v2.9.md:31 +msgid "Show helpful messages if import fails because device is out of space" +msgstr "" + +#: src/changelog/v2.9.md:32 +msgid "Fix crash when taking pictures on devices with Lollipop and older" +msgstr "" + +#: src/changelog/v2.9.md:34 +msgid "Version 2.9.4 (2020-02-18)" +msgstr "" + +#: src/changelog/v2.9.md:35 +msgid "Fix crash when fetching pronunciations in note editor" +msgstr "" + +#: src/changelog/v2.9.md:36 +msgid "Fix issue with pronunciation words not being found" +msgstr "" + +#: src/changelog/v2.9.md:37 +msgid "Fix crash on startup for users with auto-sync on startup" +msgstr "" + +#: src/changelog/v2.9.md:38 +msgid "Fix crash on deck import when app is in background" +msgstr "" + +#: src/changelog/v2.9.md:39 +msgid "Fix crash for users of Google Chrome Canary" +msgstr "" + +#: src/changelog/v2.9.md:40 +msgid "Fix crash when adding certain audio clips" +msgstr "" + +#: src/changelog/v2.9.md:41 +msgid "Fix crash related to fetching Sound metadata" +msgstr "" + +#: src/changelog/v2.9.md:42 +msgid "Fix issue where audio plays twice" +msgstr "" + +#: src/changelog/v2.9.md:44 +msgid "Version 2.9.3 (2020-02-09)" +msgstr "" + +#: src/changelog/v2.9.md:45 +msgid "Fix issues with connection timeouts and new encryption library" +msgstr "" + +#: src/changelog/v2.9.md:46 +msgid "Fix incorrect handling of decks with ':::' in their name" +msgstr "" + +#: src/changelog/v2.9.md:48 +msgid "Version 2.9.2 (2020-02-03)" +msgstr "" + +#: src/changelog/v2.9.md:49 +msgid "Add support for new AnkiWeb encryption changes" +msgstr "" + +#: src/changelog/v2.9.md:50 +msgid "Fix some bugs using filtered decks" +msgstr "" + +#: src/changelog/v2.9.md:51 +msgid "Fix crash on app startup with uninitialized collection" +msgstr "" + +#: src/changelog/v2.9.md:52 +msgid "Fix some issues with new cloze deletion menu" +msgstr "" + +#: src/changelog/v2.9.md:53 +msgid "Fix issue with Mathjax + cloze deletion" +msgstr "" + +#: src/changelog/v2.9.md:54 +msgid "Fix incorrect intervals bug with new scheduler" +msgstr "" + +#: src/changelog/v2.9.md:55 +msgid "Add various patches from Anki Desktop" +msgstr "" + +#: src/changelog/v2.9.md:57 +msgid "Version 2.9.1 (2019-10-16)" +msgstr "" + +#: src/changelog/v2.9.md:58 +msgid "Fix crash reviewing on Android 5 - 7" +msgstr "" + +#: src/changelog/v2.9.md:59 +msgid "Fix crash on Hungarian translation" +msgstr "" + +#: src/changelog/v2.9.md:61 +msgid "Version 2.9 (2019-10-14)" +msgstr "" + +#: src/changelog/v2.9.md:62 +msgid "Change to new adaptive icon" +msgstr "" + +#: src/changelog/v2.9.md:63 +msgid "Add multi-select in the card browser (delete, change deck, reschedule)" +msgstr "" + +#: src/changelog/v2.9.md:64 +msgid "Add support for new Anki 2.1 scheduler" +msgstr "" + +#: src/changelog/v2.9.md:65 +msgid "Add support for Mathjax" +msgstr "" + +#: src/changelog/v2.9.md:66 +msgid "Add ability to add local audio files to notes" +msgstr "" + +#: src/changelog/v2.9.md:67 +msgid "Add ability to specify filename and folder on export and import" +msgstr "" + +#: src/changelog/v2.9.md:68 +msgid "Add ability to insert cloze in Note Editor" +msgstr "" + +#: src/changelog/v2.9.md:69 +msgid "Add ability to reposition cards " +msgstr "" + +#: src/changelog/v2.9.md:70 +msgid "Add ability to use due reminders for specific decks" +msgstr "" + +#: src/changelog/v2.9.md:71 +msgid "Add support for gamepad input when reviewing" +msgstr "" + +#: src/changelog/v2.9.md:72 +msgid "Add support for common keyboard shortcuts from Anki Desktop" +msgstr "" + +#: src/changelog/v2.9.md:73 +msgid "Add ability to search in Card Browser for text from system context menu" +msgstr "" + +#: src/changelog/v2.9.md:74 +msgid "Add ability to recognize tts HTML elements in questions and answers" +msgstr "" + +#: src/changelog/v2.9.md:75 +msgid "Add ability to display LaTeX rendered to SVG (vs PNG) from Anki Desktop" +msgstr "" + +#: src/changelog/v2.9.md:76 +msgid "Add confirmation check for full sync trigger in preferences" +msgstr "" + +#: src/changelog/v2.9.md:77 +msgid "Fix excessive pull-to-sync false positives. Disable when not at top of page." +msgstr "" + +#: src/changelog/v2.9.md:78 +msgid "Fix some issues with focus in Note Editor" +msgstr "" + +#: src/changelog/v2.9.md:79 +msgid "Fix media sync errors related to file creation issues" +msgstr "" + +#: src/changelog/v2.9.md:80 +msgid "Fix crash related to use of camera without permission or no camera hardware " +msgstr "" + +#: src/changelog/v2.9.md:81 +msgid "Fix crash related to Card Browser allowing preview with no cards selected" +msgstr "" + +#: src/changelog/v2.9.md:82 +msgid "Fix crash in Reviewer when collection inaccessible" +msgstr "" + +#: src/changelog/v2.9.md:83 +msgid "Fix crash related to TTS when TTS not initialized" +msgstr "" + +#: src/changelog/v2.9.md:84 +msgid "Fix crash related to sdcard mount/unmount on inaccessible collection" +msgstr "" + +#: src/changelog/v2.9.md:85 +msgid "Fix crash related to audio button being visible after loading pronunciation media" +msgstr "" + +#: src/changelog/v2.9.md:86 +msgid "Fix crash when attempting to import invalid zip files " +msgstr "" + +#: src/changelog/v2.9.md:87 +msgid "Fix crash related to switching from split-window mode to single-window mode" +msgstr "" + +#: src/changelog/v2.9.md:88 +msgid "Fix crash related to missing preferences in Preference editor" +msgstr "" + +#: src/changelog/v2.9.md:89 +msgid "Fix crash on deck selection after deleting a deck and immediately closing app" +msgstr "" + +#: src/changelog/v2.9.md:90 +msgid "Fix crash in Reviewer when non-standard browser installed" +msgstr "" + +#: src/changelog/v2.9.md:91 +msgid "Fix type-answer field showing unexpectedly after undo in Reviewer" +msgstr "" + +#: src/changelog/v2.9.md:92 +msgid "Fix incorrect display of some characters when using type-answer" +msgstr "" + +#: src/changelog/v2.9.md:93 +msgid "Fix error related to media in subfolders not showing in Reviewer" +msgstr "" + +#: src/changelog/v2.9.md:94 +msgid "Fix some issues with generated flashcard html and CSS selectors" +msgstr "" + +#: src/changelog/v2.9.md:95 +msgid "Fix some Glosbe and Beolingus regressions" +msgstr "" + +#: src/changelog/v2.9.md:96 +msgid "Fix issue where new deck was created when note type was renamed" +msgstr "" + +#: src/changelog/v2.9.md:97 +msgid "Fix add note button disappearing from Card Browser when returning from search" +msgstr "" + +#: src/changelog/v2.9.md:98 +msgid "Fix some statistics display issues " +msgstr "" + +#: src/changelog/v2.9.md:99 +msgid "Fix incorrect display of some preferences" +msgstr "" + +#: src/changelog/v2.9.md:100 +msgid "Fix invisible notification bar in NoteEditor" +msgstr "" + +#: src/changelog/v2.9.md:101 +msgid "Fix newline characters not working in cloze deletions" +msgstr "" + +#: src/changelog/v2.9.md:102 +msgid "Increase max card count display from 1000 to 99999" +msgstr "" + +#: src/changelog/v2.9.md:103 +msgid "Improve display handling of very long review intervals (> 68 years)" +msgstr "" + +#: src/changelog/v2.9.md:104 +msgid "Improve next/back buttons when using Previewer on multiple cards" +msgstr "" + +#: src/changelog/v2.9.md:105 +msgid "Improve handling of selected deck between statistics, card browser and deck picker" +msgstr "" + +#: src/changelog/v2.9.md:106 +msgid "Improve Card Browser search by restoring when returning from other activities" +msgstr "" + +#: src/changelog/v2.9.md:107 +msgid "Improve card focus handling when moving between Note Editor and Card Template Editor" +msgstr "" + +#: src/changelog/v2.9.md:108 +msgid "Improve labeling of deck-group vs deck-specific options" +msgstr "" + +#: src/changelog/v2.9.md:109 +msgid "Improve formatting of HTTP error codes during sync" +msgstr "" + +#: src/changelog/v2.9.md:110 +msgid "Improve handling of multi-touch events while whiteboard displayed" +msgstr "" + +#: src/changelog/v2.9.md:111 +msgid "Improve permission dialog descriptions" +msgstr "" + +#: src/changelog/v2.9.md:112 +msgid "Improve handling of \"preview new cards\" setting when creating custom study deck" +msgstr "" + +#: src/changelog/v2.9.md:113 +msgid "Improve Navigation Drawer performance on older devices" +msgstr "" + +#: src/changelog/v2.9.md:114 +msgid "Improve database check dialog with addition progress updates during check" +msgstr "" + +#: src/changelog/v2.9.md:115 +msgid "Use different notification channels for study reminders and general notifications" +msgstr "" + +#: src/changelog/v2.9.md:116 +msgid "Drop support for Android \\< Ice Cream Sandwich MR1 (API15, Android 4.0.3)" +msgstr "" + +#: src/changelog/v2.9.md:117 +msgid "Add support for more features on Chromebook (import, export, restore backup, camera)" +msgstr "" + +#: src/changelog/v2.9.md:118 +msgid "Add API support for card/note bury and suspend" +msgstr "" + +#: src/changelog/v2.9.md:119 +msgid "Add API to open Reviewer on specific decks from other apps" +msgstr "" + +#: src/changelog/v2.9.md:120 +msgid "Add support for HTML/Javascript debugging" +msgstr "" + +#: src/changelog/v2.9.md:121 +msgid "Add link to third party apps which support AnkiDroid API in advanced preferences" +msgstr "" + +#: src/changelog/v2.9.md:122 +msgid "Fix issue with custom sync server certificates" +msgstr "" + +#: src/changelog/v2.9.md:123 +msgid "Perform basic DB integrity check on app upgrade" +msgstr "" + +#: src/changelog/v2.9.md:124 +msgid "Introduce optional analytics reporting" +msgstr "" + +#: src/changelog/v2.8.md:1 +msgid "Version 2.8.4 (2018-04-27)" +msgstr "" + +#: src/changelog/v2.8.md:2 +msgid "Fix error syncing due to too many card templates" +msgstr "" + +#: src/changelog/v2.8.md:4 +msgid "Version 2.8.3 (2017-11-10)" +msgstr "" + +#: src/changelog/v2.8.md:5 +msgid "Fix crash adding a picture from camera" +msgstr "" + +#: src/changelog/v2.8.md:6 +msgid "Fix add note icon disappearing in browser after search" +msgstr "" + +#: src/changelog/v2.8.md:7 +msgid "Fix translations from Glosbe" +msgstr "" + +#: src/changelog/v2.8.md:8 +msgid "Fix crash long-tapping when no deck is selected" +msgstr "" + +#: src/changelog/v2.8.md:9 +msgid "Fix crash entering advanced settings on some devices" +msgstr "" + +#: src/changelog/v2.8.md:10 +msgid "Fix incorrect graph display in statistics" +msgstr "" + +#: src/changelog/v2.8.md:11 +msgid "Fix deck not changing properly in statistics" +msgstr "" + +#: src/changelog/v2.8.md:12 +msgid "Fix rounding error in statistics weekly breakdown" +msgstr "" + +#: src/changelog/v2.8.md:13 +msgid "Fix spurious new deck created on model rename" +msgstr "" + +#: src/changelog/v2.8.md:14 +msgid "Improve error message on exception during media sync" +msgstr "" + +#: src/changelog/v2.8.md:15 +msgid "Improve animation when transitioning between screens" +msgstr "" + +#: src/changelog/v2.8.md:16 +msgid "Use a round icon on devices that support it" +msgstr "" + +#: src/changelog/v2.8.md:18 +msgid "Version 2.8.2 (2017-02-28)" +msgstr "" + +#: src/changelog/v2.8.md:19 +msgid "Fix bugs showing confirmation dialogs in various places" +msgstr "" + +#: src/changelog/v2.8.md:20 +msgid "Fix uncommon crash showing dialog after sync" +msgstr "" + +#: src/changelog/v2.8.md:22 +msgid "Version 2.8.1 (2017-02-06)" +msgstr "" + +#: src/changelog/v2.8.md:23 +msgid "Allow sending exported apkg to arbitrary app (e.g. Google Drive)" +msgstr "" + +#: src/changelog/v2.8.md:24 +msgid "Allow AnkiWeb to display a warning on sync completion" +msgstr "" + +#: src/changelog/v2.8.md:25 +msgid "Fix potential full-sync after sync cancellation" +msgstr "" + +#: src/changelog/v2.8.md:26 +msgid "Fix media sync sometimes scanning all files again" +msgstr "" + +#: src/changelog/v2.8.md:27 +msgid "Fix removing $ character when importing media files" +msgstr "" + +#: src/changelog/v2.8.md:28 +msgid "Improve automatic card answer timing when audio is played" +msgstr "" + +#: src/changelog/v2.8.md:29 +msgid "Improve rendering of some statistics" +msgstr "" + +#: src/changelog/v2.8.md:30 +msgid "Fix some crashes in the Russian, Vietnamese, and Chinese translations" +msgstr "" + +#: src/changelog/v2.8.md:31 +msgid "Fix crash sending exported apkg by email. NB: Export path can no longer be modified." +msgstr "" + +#: src/changelog/v2.7.md:1 +msgid "Version 2.7 (2016-10-16)" +msgstr "" + +#: src/changelog/v2.7.md:2 +msgid "Add pull-to-sync feature" +msgstr "" + +#: src/changelog/v2.7.md:3 +msgid "Add option to place answer buttons at the top" +msgstr "" + +#: src/changelog/v2.7.md:4 +msgid "Add widget to directly access \"Add note\" screen" +msgstr "" + +#: src/changelog/v2.7.md:5 +msgid "Fix issue with importing whole collections and restoring backups" +msgstr "" + +#: src/changelog/v2.7.md:6 +msgid "Fix deck import failing after the first successful one" +msgstr "" + +#: src/changelog/v2.7.md:7 +msgid "Fix cards in learning queue not being randomized" +msgstr "" + +#: src/changelog/v2.7.md:8 +msgid "Fix crash with fullscreen mode and hidden answer buttons" +msgstr "" + +#: src/changelog/v2.7.md:9 +msgid "Fix rare crash when opening deck options" +msgstr "" + +#: src/changelog/v2.7.md:10 +msgid "Improve support with TalkBack" +msgstr "" + +#: src/changelog/v2.6.md:1 +msgid "Version 2.6.1 (2016-07-08)" +msgstr "" + +#: src/changelog/v2.6.md:2 +msgid "Add card cycling in previewer (similar to desktop client)" +msgstr "" + +#: src/changelog/v2.6.md:3 +msgid "Add option to hide 'minutes left' in reviewer" +msgstr "" + +#: src/changelog/v2.6.md:4 +msgid "Fix language from app setting not always being used" +msgstr "" + +#: src/changelog/v2.6.md:5 +msgid "Fix not being able to play back new sound recording" +msgstr "" + +#: src/changelog/v2.6.md:6 +msgid "Fix potential crash on Android 2.3 (Gingerbread)" +msgstr "" + +#: src/changelog/v2.6.md:7 +msgid "Improved use of horizontal space when resizing large images" +msgstr "" + +#: src/changelog/v2.6.md:8 +msgid "Minor adjustment to black theme colors" +msgstr "" + +#: src/changelog/v2.6.md:10 +msgid "Version 2.6 (2016-06-14)" +msgstr "" + +#: src/changelog/v2.6.md:11 +msgid "Add two new themes (black, plain), selectable in preferences" +msgstr "" + +#: src/changelog/v2.6.md:12 +msgid "Make reviewer app bar icons customizable" +msgstr "" + +#: src/changelog/v2.6.md:13 +msgid "Split \"hide / delete\" menu in reviewer into \"bury\", \"suspend\", \"delete note\"" +msgstr "" + +#: src/changelog/v2.6.md:14 +msgid "Reviewer undo button now removes last stroke when whiteboard in use" +msgstr "" + +#: src/changelog/v2.6.md:15 +msgid "Add menu entry to change TTS language from reviewer" +msgstr "" + +#: src/changelog/v2.6.md:16 +msgid "Add more of the statistics available on the desktop client" +msgstr "" + +#: src/changelog/v2.6.md:17 +msgid "Add \"advanced statistics\" plugin (must be enabled in advanced settings)" +msgstr "" + +#: src/changelog/v2.6.md:18 +msgid "Add setting to configure custom sync server (advanced)" +msgstr "" + +#: src/changelog/v2.6.md:19 +msgid "Fix card templates created in AnkiDroid incorrectly using bold style" +msgstr "" + +#: src/changelog/v2.6.md:20 +msgid "Fix many importing issues (behavior now consistent with the desktop client)" +msgstr "" + +#: src/changelog/v2.6.md:21 +msgid "Fix long-tapping card in browser not always working" +msgstr "" + +#: src/changelog/v2.6.md:22 +msgid "Update sound playback button image" +msgstr "" + +#: src/changelog/v2.6.md:23 +msgid "Reduce size of whiteboard and gesture area for better interoperability with full screen" +msgstr "" + +#: src/changelog/v2.6.md:24 +msgid "Improve error messages with inaccessible collections" +msgstr "" + +#: src/changelog/v2.6.md:25 +msgid "Allow auto-play of HTML media elements (for templates that enable it)" +msgstr "" + +#: src/changelog/v2.6.md:26 +msgid "Significant updates to the content provider and API (for developers; see documentation)" +msgstr "" + +#: src/changelog/v2.6.md:27 +msgid "Many small bug fixes, improvements, theme adjustments, translation updates" +msgstr "" + +#: src/changelog/v2.5.md:1 +msgid "Version 2.5.4 (2015-12-14)" +msgstr "" + +#: src/changelog/v2.5.md:2 +msgid "Fix background color in overflow menu of deck picker" +msgstr "" + +#: src/changelog/v2.5.md:4 +msgid "Version 2.5.3 (2015-12-14)" +msgstr "" + +#: src/changelog/v2.5.md:5 +msgid "Fix floating action button (blue +) interfering with deck list on Android 2.3" +msgstr "" + +#: src/changelog/v2.5.md:6 +msgid "Fix opening apkg files from Gmail" +msgstr "" + +#: src/changelog/v2.5.md:7 +msgid "Fix automatic playback of consecutive videos" +msgstr "" + +#: src/changelog/v2.5.md:8 +msgid "Add a new launch screen" +msgstr "" + +#: src/changelog/v2.5.md:9 +msgid "Improve behaviour surrounding the deck overview screen" +msgstr "" + +#: src/changelog/v2.5.md:10 +msgid "Multiple media files can now be added to one field in the note editor" +msgstr "" + +#: src/changelog/v2.5.md:11 +msgid "Don't include unused media files on export" +msgstr "" + +#: src/changelog/v2.5.md:12 +msgid "Undo behaviour is now consistent with the desktop client (can no longer undo note edits)" +msgstr "" + +#: src/changelog/v2.5.md:13 +msgid "Enhancements to sync canceling" +msgstr "" + +#: src/changelog/v2.5.md:14 +msgid "Minor performance enhancements, crash fixes, and UI tweaks" +msgstr "" + +#: src/changelog/v2.5.md:16 +msgid "Version 2.5.2 (2015-12-04)" +msgstr "" + +#: src/changelog/v2.5.md:17 +msgid "Fix start-up crashes on Samsung devices running Android 4.2" +msgstr "" + +#: src/changelog/v2.5.md:18 +msgid "Fix crash for new users on Android 6.0" +msgstr "" + +#: src/changelog/v2.5.md:19 +msgid "Reverted to old typing method. The new method is now an option which is off by default." +msgstr "" + +#: src/changelog/v2.5.md:20 +msgid "You can now click on the numbers in the right-most part of the deck list to open the deck overview screen" +msgstr "" + +#: src/changelog/v2.5.md:21 +msgid "Various fixes to transition animations and progress bars" +msgstr "" + +#: src/changelog/v2.5.md:22 +msgid "Add option to remove empty cards (previously only possible on desktop)" +msgstr "" + +#: src/changelog/v2.5.md:23 +msgid "Remove: Google Translate filter. In practice, this feature had no effect and is not required" +msgstr "" + +#: src/changelog/v2.5.md:24 +msgid "Remove: Google image search for multimedia card. The image search API has been discontinued by Google and no longer works" +msgstr "" + +#: src/changelog/v2.5.md:26 +msgid "Version 2.5.1 (2015-12-01)" +msgstr "" + +#: src/changelog/v2.5.md:27 +msgid "Fix crash when loading deck list (could not open collection bug)" +msgstr "" + +#: src/changelog/v2.5.md:28 +msgid "Fix visible progress bar showing when answering card" +msgstr "" + +#: src/changelog/v2.5.md:30 +msgid "Version 2.5 (2015-11-30)" +msgstr "" + +#: src/changelog/v2.5.md:31 +msgid "Redesign of user interface to use material design" +msgstr "" + +#: src/changelog/v2.5.md:32 +msgid "Add new dark theme" +msgstr "" + +#: src/changelog/v2.5.md:33 +msgid "Simplify the study process by bypassing deck overview screen" +msgstr "" + +#: src/changelog/v2.5.md:34 +msgid "Add ability to add, edit, delete note types" +msgstr "" + +#: src/changelog/v2.5.md:35 +msgid "Add setting to enable auto-sync and a Tasker intent to trigger sync" +msgstr "" + +#: src/changelog/v2.5.md:36 +msgid "Replace \"instant add\" feature with new API for 3rd party apps to add cards directly to AnkiDroid" +msgstr "" + +#: src/changelog/v2.5.md:37 +msgid "\"Type in the answer\" input box now built into the card html itself" +msgstr "" + +#: src/changelog/v2.5.md:38 +msgid "Make fullscreen-mode immersive and added setting to hide answer buttons when using gestures" +msgstr "" + +#: src/changelog/v2.5.md:39 +msgid "Add css class for customizing card background color when night mode is enabled" +msgstr "" + +#: src/changelog/v2.5.md:40 +msgid "Allow changing media volume from the deck picker" +msgstr "" + +#: src/changelog/v2.5.md:41 +msgid "Add ability to save and view common searches in the card browser" +msgstr "" + +#: src/changelog/v2.5.md:42 +msgid "Browser now shows full question and answer in the results by default" +msgstr "" + +#: src/changelog/v2.5.md:43 +msgid "Only show tags relevant to that deck when doing custom study by tag" +msgstr "" + +#: src/changelog/v2.5.md:44 +msgid "Fix some bugs in the widget" +msgstr "" + +#: src/changelog/v2.5.md:45 +msgid "Remove \"simple interface\"" +msgstr "" + +#: src/changelog/v2.5.md:46 +msgid "Remove support for Android version 2.1 and 2.2 (minimum is now 2.3.3)" +msgstr "" + +#: src/changelog/v2.5.md:47 +msgid "Add support for Android 6 Marshmallow" +msgstr "" + +#: src/changelog/v2.5.md:48 +msgid "Disable write-ahead-logging in sqlite database" +msgstr "" + +#: src/changelog/v2.5.md:49 +msgid "Many other bug fixes and small improvements" +msgstr "" + +#: src/changelog/v2.4.md:1 +msgid "Version 2.4.4 (2015-10-20)" +msgstr "" + +#: src/changelog/v2.4.md:2 +msgid "Fix playback of sound files with apostrophes in file name" +msgstr "" + +#: src/changelog/v2.4.md:3 +msgid "Fix new card siblings not being buried for the same day" +msgstr "" + +#: src/changelog/v2.4.md:4 +msgid "Fix media on cards when using the Hebrew Fix option" +msgstr "" + +#: src/changelog/v2.4.md:5 +msgid "Fix crashes related to \"Relative overdueness\" and make this sort order available on AnkiDroid" +msgstr "" + +#: src/changelog/v2.4.md:6 +msgid "When mixing new and review cards, make their rotation more consistent with desktop" +msgstr "" + +#: src/changelog/v2.4.md:8 +msgid "Version 2.4.3 (2015-04-21)" +msgstr "" + +#: src/changelog/v2.4.md:9 +msgid "Fix \"unknown field\" bug" +msgstr "" + +#: src/changelog/v2.4.md:10 +msgid "Fix crash showing welcome screen on Android 2.3" +msgstr "" + +#: src/changelog/v2.4.md:11 +msgid "Fix crash caused by widget" +msgstr "" + +#: src/changelog/v2.4.md:12 +msgid "Fix rare crash in browser" +msgstr "" + +#: src/changelog/v2.4.md:13 +msgid "Fix a couple of sync issues" +msgstr "" + +#: src/changelog/v2.4.md:14 +msgid "Fix crash starting AnkiDroid on a small number of devices" +msgstr "" + +#: src/changelog/v2.4.md:15 src/changelog/v2.4.md:29 +msgid "Update translations" +msgstr "" + +#: src/changelog/v2.4.md:17 +msgid "Version 2.4.2 (2015-03-18)" +msgstr "" + +#: src/changelog/v2.4.md:18 +msgid "Fix some bugs with cloze templates" +msgstr "" + +#: src/changelog/v2.4.md:19 +msgid "Fix a translation error" +msgstr "" + +#: src/changelog/v2.4.md:21 +msgid "Version 2.4.1 (2015-03-15)" +msgstr "" + +#: src/changelog/v2.4.md:22 +msgid "Fix some bugs with filtered decks" +msgstr "" + +#: src/changelog/v2.4.md:23 +msgid "Improve importing of shared decks" +msgstr "" + +#: src/changelog/v2.4.md:24 +msgid "Open settings if AnkiDroid dir inaccessible" +msgstr "" + +#: src/changelog/v2.4.md:25 +msgid "Fix a bug with zooming" +msgstr "" + +#: src/changelog/v2.4.md:26 +msgid "Fix a bug where old card was still shown in reviewer after changing deck" +msgstr "" + +#: src/changelog/v2.4.md:27 +msgid "Fix some issues with cloze deletion" +msgstr "" + +#: src/changelog/v2.4.md:28 +msgid "Fix various crashes" +msgstr "" + +#: src/changelog/v2.4.md:31 +msgid "Version 2.4 (2015-01-28)" +msgstr "" + +#: src/changelog/v2.4.md:32 +msgid "Move \"preview\" feature to browser" +msgstr "" + +#: src/changelog/v2.4.md:33 +msgid "Add ability to change note type of existing flashcards" +msgstr "" + +#: src/changelog/v2.4.md:34 +msgid "Add ability to view and delete card templates" +msgstr "" + +#: src/changelog/v2.4.md:35 +msgid "Fix TTS for most devices" +msgstr "" + +#: src/changelog/v2.4.md:36 +msgid "Support playback of videos (see supported formats [here](http://developer.android.com/guide/appendix/media-formats.html))" +msgstr "" + +#: src/changelog/v2.4.md:37 +msgid "Improve rendering of second column in browser" +msgstr "" + +#: src/changelog/v2.4.md:38 +msgid "Improve detection of swipe gestures" +msgstr "" + +#: src/changelog/v2.4.md:39 +msgid "Increase number of languages in Glosbe translator" +msgstr "" + +#: src/changelog/v2.4.md:40 +msgid "Add support for Chromebooks" +msgstr "" + +#: src/changelog/v2.4.md:41 +msgid "New crash report system" +msgstr "" + +#: src/changelog/v2.4.md:42 +msgid "Bug fixes" +msgstr "" + +#: src/changelog/v2.3.md:1 +msgid "Version 2.3.2 (2014-11-06)" +msgstr "" + +#: src/changelog/v2.3.md:2 +msgid "Bug fixes: Sync, TTS, Remote images, Advanced editor, Export" +msgstr "" + +#: src/changelog/v2.3.md:3 +msgid "Note: This is the last version of AnkiDroid supported by AnkiWeb. Previous versions will not sync." +msgstr "" + +#: src/changelog/v2.3.md:5 +msgid "Version 2.3 (2014-10-27)" +msgstr "" + +#: src/changelog/v2.3.md:6 +msgid "Add new user manual" +msgstr "" + +#: src/changelog/v2.3.md:7 +msgid "Make statistics identical to Anki Desktop" +msgstr "" + +#: src/changelog/v2.3.md:8 +msgid "Fixes to media sync" +msgstr "" + +#: src/changelog/v2.3.md:9 +msgid "Fix bug where images were not showing" +msgstr "" + +#: src/changelog/v2.3.md:10 +msgid "Change layout of note editor" +msgstr "" + +#: src/changelog/v2.3.md:11 +msgid "Add new disable whiteboard option to reviewer and update icons" +msgstr "" + +#: src/changelog/v2.3.md:12 +msgid "Add full support for APKG export and import" +msgstr "" + +#: src/changelog/v2.3.md:13 +msgid "Add feature to email exported APKG" +msgstr "" + +#: src/changelog/v2.3.md:14 +msgid "Increase default number of backups and use APKG" +msgstr "" + +#: src/changelog/v2.3.md:15 +msgid "Make preview card accessible from card browser" +msgstr "" + +#: src/changelog/v2.3.md:16 +msgid "Make shared decks download with Android browser" +msgstr "" + +#: src/changelog/v2.3.md:17 +msgid "Add reset and reschedule feature in note editor" +msgstr "" + +#: src/changelog/v2.3.md:18 +msgid "Add a new notification system and icon" +msgstr "" + +#: src/changelog/v2.3.md:19 +msgid "Replace tutorial deck with new welcome screen" +msgstr "" + +#: src/changelog/v2.3.md:20 +msgid "Disable opening navigation drawer from reviewer when swipe is used" +msgstr "" + +#: src/changelog/v2.3.md:21 +msgid "Improve audio recording quality" +msgstr "" + +#: src/changelog/v2.3.md:22 +msgid "Support sticky fields when enabled in Anki Desktop" +msgstr "" + +#: src/changelog/v2.3.md:23 +msgid "Many other bug fixes" +msgstr "" + +#: src/changelog/v2.2.md:1 +msgid "Version 2.2.3 (2014-08-04)" +msgstr "" + +#: src/changelog/v2.2.md:2 +msgid "New media sync protocol" +msgstr "" + +#: src/changelog/v2.2.md:3 +msgid "Fix 2 bugs for opening links and resuming the app" +msgstr "" + +#: src/changelog/v2.2.md:5 +msgid "Version 2.2 (2014-07-21)" +msgstr "" + +#: src/changelog/v2.2.md:6 +msgid "Redesign layout" +msgstr "" + +#: src/changelog/v2.2.md:7 +msgid "Add pictures and sounds to flashcards (experimental)" +msgstr "" + +#: src/changelog/v2.2.md:8 +msgid "Make second column in card browser configurable" +msgstr "" + +#: src/changelog/v2.2.md:9 +msgid "Make images on flashcards zoomable" +msgstr "" + +#: src/changelog/v2.2.md:10 +msgid "Improve preview feature and access via action bar" +msgstr "" + +#: src/changelog/v2.2.md:11 +msgid "Simplify menus and settings" +msgstr "" + +#: src/changelog/v2.2.md:12 +msgid "Make slow searches in card browser cancellable" +msgstr "" + +#: src/changelog/v2.2.md:13 +msgid "Improve adding/removing tags" +msgstr "" + +#: src/changelog/v2.2.md:14 +msgid "Fix \"type in the answer\" and cloze deletion features" +msgstr "" + +#: src/changelog/v2.2.md:15 +msgid "Fix whiteboard feature" +msgstr "" + +#: src/changelog/v2.2.md:16 +msgid "Restore backups from within the app" +msgstr "" + +#: src/changelog/v2.2.md:17 +msgid "Make volume duck on any background music when sounds played" +msgstr "" + +#: src/changelog/v2.2.md:18 +msgid "Make playing of sounds consistent with Desktop version" +msgstr "" + +#: src/changelog/v2.2.md:19 +msgid "Remove animations feature due to being buggy" +msgstr "" + +#: src/changelog/v2.2.md:20 +msgid "Improve speed of showing cards" +msgstr "" + +#: src/changelog/v2.2.md:21 +msgid "Remove duplicate check dialog when adding new flashcards" +msgstr "" + +#: src/changelog/v2.2.md:22 +msgid "Remove swap button when adding or editing flashcards" +msgstr "" + +#: src/changelog/v2.2.md:23 +msgid "Remove kanji info feature (will become optional plugin in the future)" +msgstr "" + +#: src/changelog/v2.2.md:24 +msgid "Make minimum Android version 2.1" +msgstr "" + +#: src/changelog/v2.2.md:25 +msgid "Fix lots of bugs" +msgstr "" + +#: src/changelog/v2.1.md:1 +msgid "Version 2.1.3 (2014-04-05)" +msgstr "" + +#: src/changelog/v2.1.md:2 +msgid "Create new notes in correct deck" +msgstr "" + +#: src/changelog/v2.1.md:3 +msgid "TTS fixes" +msgstr "" + +#: src/changelog/v2.1.md:5 +msgid "Version 2.1 (2014-03-27)" +msgstr "" + +#: src/changelog/v2.1.md:6 +msgid "Lots of Bug Fixes" +msgstr "" + +#: src/changelog/v2.1.md:7 +msgid "New custom study option with improved tag selection" +msgstr "" + +#: src/changelog/v2.1.md:8 +msgid "New preview card feature in note editor (experimental)" +msgstr "" + +#: src/changelog/v2.1.md:9 +msgid "New override font preference in addition to default font" +msgstr "" + +#: src/changelog/v2.1.md:10 +msgid "New \"Kanji Info\" feature (enabled in preferences->reviewing->Kanji Info)" +msgstr "" + +#: src/changelog/v2.1.md:11 +msgid "Improve Aedict integration" +msgstr "" + +#: src/changelog/v2.1.md:12 +msgid "Support for Samsung Multi-Window" +msgstr "" + +#: src/changelog/v2.1.md:13 +msgid "Fix Some TTS Issues" +msgstr "" + +#: src/changelog/v2.1.md:14 +msgid "Updated Translations" +msgstr "" + +#: src/changelog/v2.1.md:15 +msgid "Remove unused media check when deleting decks" +msgstr "" + +#: src/changelog/v2.1.md:16 +msgid "Significantly increase speed for reducing filtered decks" +msgstr "" + +#: src/changelog/v2.1.md:17 +msgid "Remove upgrade wizard" +msgstr "" + +#: src/changelog/v2.0.md:1 +msgid "Version 2.0.4 (2014-02-03)" +msgstr "" + +#: src/changelog/v2.0.md:2 +msgid "Fix issue with typing answers" +msgstr "" + +#: src/changelog/v2.0.md:3 +msgid "Default font now overrides card font" +msgstr "" + +#: src/changelog/v2.0.md:4 +msgid "Fixed audio playback image being covered by text on Android 2.3" +msgstr "" + +#: src/changelog/v2.0.md:5 +msgid "Fixed reviewer crash when language set to Romanian" +msgstr "" + +#: src/changelog/v2.0.md:6 +msgid "Translation fixes" +msgstr "" + +#: src/changelog/v2.0.md:8 +msgid "Version 2.0.2 (2013-12-15)" +msgstr "" + +#: src/changelog/v2.0.md:9 +msgid "Fixed lots of crashes" +msgstr "" + +#: src/changelog/v2.0.md:10 +msgid "Tablet UI fixes" +msgstr "" + +#: src/changelog/v2.0.md:11 +msgid "Fixed new card ordering issues" +msgstr "" + +#: src/changelog/v2.0.md:12 +msgid "Card appearance now matches desktop Anki. (Centering cards is off by default but can be re-enabled)" +msgstr "" + +#: src/changelog/v2.0.md:13 +msgid "Option groups can now be changed in AnkiDroid" +msgstr "" + +#: src/changelog/v2.0.md:14 +msgid "Clear error message when using a bad template" +msgstr "" + +#: src/changelog/v2.0.md:15 +msgid "Fixed timeboxing notifications" +msgstr "" + +#: src/changelog/v2.0.md:16 +msgid "Properly scale images" +msgstr "" + +#: src/changelog/v2.0.md:17 +msgid "Better custom font handling" +msgstr "" + +#: src/changelog/v2.0.md:18 +msgid "More settings (next day starts at, timeboxing value, etc.)" +msgstr "" + +#: src/changelog/v2.0.md:19 +msgid "Changing AnkiDroid interface language now works." +msgstr "" + +#: src/changelog/v2.0.md:20 +msgid "Fixed import/shared deck download issues (\"not a valid apkg file\")" +msgstr "" + +#: src/changelog/v2.0.md:21 +msgid "Fixed invisible text on Motorola devices" +msgstr "" + +#: src/changelog/v2.0.md:22 +msgid "Focus on answer when revealed" +msgstr "" + +#: src/changelog/v2.0.md:23 +msgid "Filtered decks are now blue in deck list" +msgstr "" + +#: src/changelog/v2.0.md:24 +msgid "Removed unused circle button in note editor" +msgstr "" + +#: src/changelog/v2.0.md:26 +msgid "Version 2.0.1 (2013-02-06)" +msgstr "" + +#: src/changelog/v2.0.md:27 +msgid "Upgrade wizard" +msgstr "" + +#: src/changelog/v2.0.md:28 +msgid "Fix importing apkgs" +msgstr "" + +#: src/changelog/v2.0.md:29 +msgid "Fix media syncing" +msgstr "" + +#: src/changelog/v2.0.md:31 +msgid "Version 2.0 (2013-01-03)" +msgstr "" + +#: src/changelog/v2.0.md:32 +msgid "complete revision" +msgstr "" + +#: src/changelog/v2.0.md:33 +msgid "libanki2.0 scheduling" +msgstr "" + +#: src/changelog/v2.0.md:34 +msgid "new learning mode" +msgstr "" + +#: src/changelog/v2.0.md:35 +msgid "new layout" +msgstr "" + +#: src/changelog/v2.0.md:36 +msgid "merge syncing possible now" +msgstr "" + +#: src/changelog/v2.0.md:37 +msgid "better statistics" +msgstr "" + +#: src/changelog/v2.0.md:38 +msgid "decks are now saved in a single collection" +msgstr "" + +#: src/changelog/v2.0.md:39 +msgid "options are shareable now" +msgstr "" + +#: src/changelog/v2.0.md:40 +msgid "tablet layout" +msgstr "" + +#: src/changelog/v2.0.md:41 +msgid "tons of performance improvements" +msgstr "" + +#: src/changelog/v2.0.md:42 +msgid "card import function" +msgstr "" + +#: src/changelog/v2.0.md:43 +msgid "collection can be saved on internal memory" +msgstr "" + +#: src/changelog/v0.1-to-1.1.3.md:2 +msgid "AnkiDroid has continuously evolved collectively as an open source project, with the first version released to the Google Market on [June 28 2009](http://nicolas-raoul.blogspot.jp/2009/06/just-published-ankidroid-on-market.html). " +msgstr "" + +#: src/changelog/v0.1-to-1.1.3.md:4 +msgid "Version 1.1.3 was the last 1.x version (released on 26th June 2012), before the incompatible AnkiDroid v2.0 was released, essentially rewritten from scratch to be compatible with the new Anki Desktop v2.0." +msgstr "" + diff --git a/po/ja.po b/po/ja.po new file mode 100644 index 0000000..250cf1c --- /dev/null +++ b/po/ja.po @@ -0,0 +1,6445 @@ +msgid "" +msgstr "" +"Project-Id-Version: ankidroiddocs\n" +"POT-Creation-Date: 2024-02-01T17:14:41Z\n" +"PO-Revision-Date: 2024-02-01 17:15\n" +"Last-Translator: \n" +"Language-Team: Japanese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: ankidroiddocs\n" +"X-Crowdin-Project-ID: 645072\n" +"X-Crowdin-Language: ja\n" +"X-Crowdin-File: messages.pot\n" +"X-Crowdin-File-ID: 2\n" + +#: src/SUMMARY.md:1 +msgid "Summary" +msgstr "" + +#: src/SUMMARY.md:3 src/intro.md:1 src/intro.md:1 +msgid "Introduction" +msgstr "" + +#: src/SUMMARY.md:4 src/getting-started.md:1 +msgid "Getting started" +msgstr "" + +#: src/SUMMARY.md:6 src/deck-picker.md:1 +msgid "The Deck List" +msgstr "" + +#: src/SUMMARY.md:8 src/drawer.md:1 +msgid "Navigation Drawer" +msgstr "" + +#: src/SUMMARY.md:10 src/deck-overview.md:1 +msgid "Deck Overview Screen" +msgstr "" + +#: src/SUMMARY.md:12 src/reviewer.md:1 +msgid "Study Screen" +msgstr "" + +#: src/SUMMARY.md:14 src/adding-notes.md:1 +msgid "Add Note Screen" +msgstr "" + +#: src/SUMMARY.md:16 src/editing-notes.md:1 +msgid "Edit Note Screen" +msgstr "" + +#: src/SUMMARY.md:18 src/browser.md:1 +msgid "Finding/Searching/Browsing" +msgstr "" + +#: src/SUMMARY.md:20 src/filtered-deck.md:1 +msgid "Filtered Decks" +msgstr "" + +#: src/SUMMARY.md:22 src/importing/importing-anki-files.md:1 +msgid "Importing Anki Files" +msgstr "" + +#: src/SUMMARY.md:23 src/importing/importing-anki-databases.md:1 +msgid "Importing Anki Databases (.anki2)" +msgstr "" + +#: src/SUMMARY.md:25 src/exporting.md:1 +msgid "Exporting Anki Files" +msgstr "" + +#: src/SUMMARY.md:27 src/backups.md:1 +msgid "Automatic Backups" +msgstr "" + +#: src/SUMMARY.md:29 src/settings.md:1 +msgid "Preferences" +msgstr "" + +#: src/SUMMARY.md:31 src/gestures.md:1 +msgid "Gestures" +msgstr "" + +#: src/SUMMARY.md:33 src/note-formatting-toolbar.md:1 +msgid "Note Formatting Toolbar" +msgstr "" + +#: src/SUMMARY.md:35 src/keyboard-shortcuts.md:1 +msgid "Keyboard Shortcuts" +msgstr "" + +#: src/SUMMARY.md:37 src/rtl.md:1 +msgid "Using Right-To-Left Languages with AnkiDroid" +msgstr "" + +#: src/SUMMARY.md:39 src/anki-desktop.md:1 +msgid "Using Anki Desktop with AnkiDroid" +msgstr "" + +#: src/SUMMARY.md:41 src/ankiweb-conflicts.md:1 +msgid "Dealing with merge conflicts on AnkiWeb" +msgstr "" + +#: src/SUMMARY.md:43 src/advanced-features/intro.md:1 +msgid "Advanced Features" +msgstr "" + +#: src/SUMMARY.md:44 src/advanced-features/mathjax.md:1 +msgid "MathJax Support" +msgstr "" + +#: src/SUMMARY.md:45 src/advanced-features/reverse-cards.md:1 +msgid "Reverse Cards" +msgstr "" + +#: src/SUMMARY.md:46 src/advanced-features/custom-fonts.md:1 +msgid "Custom Fonts" +msgstr "" + +#: src/SUMMARY.md:47 src/advanced-features/customizing-card-layout.md:1 +msgid "Custom Card Layout" +msgstr "" + +#: src/SUMMARY.md:48 src/advanced-features/type-in-answer.md:1 +msgid "Type in the answer feature" +msgstr "" + +#: src/SUMMARY.md:49 src/gestures.md:146 +#: src/advanced-features/advanced-statistics.md:1 +msgid "Advanced Statistics" +msgstr "" + +#: src/SUMMARY.md:50 src/advanced-features/reminders.md:1 +msgid "Reminders" +msgstr "" + +#: src/SUMMARY.md:51 src/advanced-features/set-language-hint.md:1 +msgid "Automatic Language Selection" +msgstr "" + +#: src/SUMMARY.md:54 +msgid "Help & Supports" +msgstr "" + +#: src/SUMMARY.md:55 src/beta-testing.md:1 +msgid "Beta testing" +msgstr "" + +#: src/SUMMARY.md:56 src/help.md:33 src/contributing.md:1 +msgid "Contributing to AnkiDroid" +msgstr "" + +#: src/SUMMARY.md:57 +msgid "Changelog" +msgstr "" + +#: src/SUMMARY.md:58 +msgid "Version 2.15" +msgstr "" + +#: src/SUMMARY.md:59 +msgid "Version 2.14" +msgstr "" + +#: src/SUMMARY.md:60 +msgid "Version 2.13" +msgstr "" + +#: src/SUMMARY.md:61 +msgid "Version 2.12" +msgstr "" + +#: src/SUMMARY.md:62 +msgid "Version 2.11" +msgstr "" + +#: src/SUMMARY.md:63 +msgid "Version 2.10" +msgstr "" + +#: src/SUMMARY.md:64 +msgid "Version 2.9" +msgstr "" + +#: src/SUMMARY.md:65 +msgid "Version 2.8" +msgstr "" + +#: src/SUMMARY.md:66 +msgid "Version 2.7" +msgstr "" + +#: src/SUMMARY.md:67 +msgid "Version 2.6" +msgstr "" + +#: src/SUMMARY.md:68 +msgid "Version 2.5" +msgstr "" + +#: src/SUMMARY.md:69 +msgid "Version 2.4" +msgstr "" + +#: src/SUMMARY.md:70 +msgid "Version 2.3" +msgstr "" + +#: src/SUMMARY.md:71 +msgid "Version 2.2" +msgstr "" + +#: src/SUMMARY.md:72 +msgid "Version 2.1" +msgstr "" + +#: src/SUMMARY.md:73 +msgid "Version 2.0" +msgstr "" + +#: src/SUMMARY.md:74 src/changelog/v0.1-to-1.1.3.md:1 +msgid "Version 0.1 to 1.1.3" +msgstr "" + +#: src/intro.md:3 src/intro.md:3 +msgid "Thank you for using AnkiDroid, the Android client for the popular [Anki](http://ankisrs.net) spaced repetition system. " +msgstr "" + +#: src/intro.md:5 src/intro.md:5 +msgid "Anki is spaced repetition technique which is simple but highly effective. It helps you memorize things by automatically repeating them across increasing intervals based on your responses with no need for you to keep track of what to study or when to study it. You create notes (or download shared decks) with content you need to memorize, and the scheduler will make sure you see the content when you need to." +msgstr "" + +#: src/intro.md:7 src/intro.md:7 +msgid "AnkiDroid is intended to be used in conjunction with Anki on your computer. While it is possible to function without it, some tasks are either only possible with, or a lot more efficient with Anki Desktop. Furthermore, it is **strongly recommended** to at least read [`Key Concepts`](https://docs.ankiweb.net/getting-started.html#key-concepts) section of the main Anki manual to understand the terminology used here." +msgstr "" + +#: src/intro.md:9 src/intro.md:9 +msgid "If this manual doesn't contain what you are looking for, please check the [AnkiDroid Wiki](https://github.com/ankidroid/Anki-Android/wiki) for a list of changes, instructions for submitting bug reports and feature requests, a list of frequently asked questions, and much more." +msgstr "" + +#: src/getting-started.md:2 +msgid "To start using AnkiDroid, we need to add some cards to study. From the main screen, tapping the big blue plus button will allow you to either add a new **note** (i.e. create new flashcards), download shared decks (decks that other people have created and shared online), or create new empty decks." +msgstr "" + +#: src/getting-started.md:4 +msgid "Please watch this 5 minute [tutorial video](https://www.youtube.com/watch?v=F2K1gOSdIZA), which gives an introduction to adding, downloading, and studying cards in AnkiDroid. More detailed information can be found in the sections below." +msgstr "" + +#: src/getting-started.md:6 +msgid "If you are an existing user of Anki Desktop wishing to import your decks from the computer, you might like to skip straight to the [using AnkiDroid with Anki Desktop](anki-desktop.md#using-anki-desktop-with-ankidroid) section." +msgstr "" + +#: src/deck-picker.md:3 +msgid "[Add button](#add-button)" +msgstr "" + +#: src/deck-picker.md:4 +msgid "[Add](#add)" +msgstr "" + +#: src/deck-picker.md:5 +msgid "[Get shared decks](#get-shared-decks)" +msgstr "" + +#: src/deck-picker.md:6 +msgid "[Create deck](#create-deck)" +msgstr "" + +#: src/deck-picker.md:7 +msgid "[App Bar](#app-bar)" +msgstr "" + +#: src/deck-picker.md:8 +msgid "[Navigation menu button](#navigation-menu-button)" +msgstr "" + +#: src/deck-picker.md:9 +msgid "[Sync button](#sync-button)" +msgstr "" + +#: src/deck-picker.md:10 +msgid "[Overflow menu button](#overflow-menu-button)" +msgstr "" + +#: src/deck-picker.md:11 +msgid "[Studying a Deck](#studying-a-deck)" +msgstr "" + +#: src/deck-picker.md:12 +msgid "[Other Deck Actions](#other-deck-actions)" +msgstr "" + +#: src/deck-picker.md:13 +msgid "[Rename deck](#rename-deck)" +msgstr "" + +#: src/deck-picker.md:14 +msgid "[Deck options](#deck-options)" +msgstr "" + +#: src/deck-picker.md:15 +msgid "[Custom study](#custom-study)" +msgstr "" + +#: src/deck-picker.md:16 +msgid "[Delete deck](#delete-deck)" +msgstr "" + +#: src/deck-picker.md:17 +msgid "[Export deck](#export-deck)" +msgstr "" + +#: src/deck-picker.md:18 src/deck-overview.md:11 +msgid "[Unbury](#unbury)" +msgstr "" + +#: src/deck-picker.md:19 +msgid "[Rebuild / Empty](#rebuild--empty)" +msgstr "" + +#: src/deck-picker.md:20 +msgid "[Clickable areas on the decks](#clickable-areas-on-the-decks)" +msgstr "" + +#: src/deck-picker.md:21 +msgid "[Deck expander](#deck-expander)" +msgstr "" + +#: src/deck-picker.md:22 +msgid "[Deck name](#deck-name)" +msgstr "" + +#: src/deck-picker.md:23 +msgid "[Count buttons](#count-buttons)" +msgstr "" + +#: src/deck-picker.md:24 +msgid "[Advanced Actions](#advanced-actions)" +msgstr "" + +#: src/deck-picker.md:25 src/gestures.md:11 +msgid "[Undo](#undo)" +msgstr "" + +#: src/deck-picker.md:26 +msgid "[Check database](#check-database)" +msgstr "" + +#: src/deck-picker.md:27 +msgid "[Check media](#check-media)" +msgstr "" + +#: src/deck-picker.md:28 +msgid "[Empty cards](#empty-cards)" +msgstr "" + +#: src/deck-picker.md:29 +msgid "[Restore from backup](#restore-from-backup)" +msgstr "" + +#: src/deck-picker.md:30 +msgid "[Manage note types](#manage-note-types)" +msgstr "" + +#: src/deck-picker.md:31 +msgid "[Import](#import)" +msgstr "" + +#: src/deck-picker.md:32 +msgid "[Export collection](#export-collection)" +msgstr "" + +#: src/deck-picker.md:33 +msgid "[Deck Counts](#deck-counts)" +msgstr "" + +#: src/deck-picker.md:35 +msgid "__Note:__ _This section onwards assumes you understand what [decks and cards](https://docs.ankiweb.net/getting-started.html#key-concepts) are_" +msgstr "" + +#: src/deck-picker.md:37 +msgid "The deck list is the screen you see when you start AnkiDroid. It displays a list of the decks which contain all of your flashcards, and allows you to perform various actions:" +msgstr "" + +#: src/deck-picker.md:39 +msgid "![decks.png](img/1-decks.png)" +msgstr "" + +#: src/deck-picker.md:41 +msgid "Add button" +msgstr "" + +#: src/deck-picker.md:42 +msgid "The big blue + button in the bottom right corner is used to add new material to AnkiDroid. Pressing it expands to give the following three options, which are also described in the [tutorial video](https://www.youtube.com/watch?v=F2K1gOSdIZA)." +msgstr "" + +#: src/deck-picker.md:44 +msgid "Add" +msgstr "" + +#: src/deck-picker.md:45 +msgid "Choose this option if you want to create your own flashcards (notes) with AnkiDroid. \"Notes\" and \"cards\" have specific meanings in Anki, which are [explained in the main Anki manual](https://docs.ankiweb.net/getting-started.html#key-concepts). Please see the tutorial video for a quick introduction to adding notes, or refer to the [adding notes](adding-notes.md#add-note-screen) section below for more detailed information." +msgstr "" + +#: src/deck-picker.md:47 +msgid "Get shared decks" +msgstr "" + +#: src/deck-picker.md:48 +msgid "To download a deck of cards from the internet that another user has contributed:" +msgstr "" + +#: src/deck-picker.md:49 +msgid "Ensure you're connected to the internet." +msgstr "" + +#: src/deck-picker.md:50 +msgid "Tap + and then **Get shared decks**. AnkiWeb will open." +msgstr "" + +#: src/deck-picker.md:51 +msgid "Select a category, or type in a search." +msgstr "" + +#: src/deck-picker.md:52 +msgid "Tap **Info** on a deck you'd like to study." +msgstr "" + +#: src/deck-picker.md:53 +msgid "Scroll down and tap **Download**." +msgstr "" + +#: src/deck-picker.md:54 +msgid "You browser will download the file and display a `download complete` notification. Tap this button." +msgstr "" + +#: src/deck-picker.md:56 +msgid "AnkiDroid will appear, and show a confirmation dialog. Tap the **Add** button." +msgstr "" + +#: src/deck-picker.md:57 +msgid "When the import completes, your deck should be ready to study." +msgstr "" + +#: src/deck-picker.md:59 +msgid "Create deck" +msgstr "" + +#: src/deck-picker.md:60 +msgid "To create a new empty deck:" +msgstr "" + +#: src/deck-picker.md:61 +msgid "Tap the **+** button and choose `Create deck`" +msgstr "" + +#: src/deck-picker.md:62 +msgid "Choose a name for the deck, for example `New Japanese`" +msgstr "" + +#: src/deck-picker.md:63 +msgid "Add cards to it following the `Add` instructions above" +msgstr "" + +#: src/deck-picker.md:65 src/reviewer.md:16 +msgid "App Bar" +msgstr "" + +#: src/deck-picker.md:66 +msgid "At the top of each screen in AnkiDroid is the App Bar, with buttons for performing various actions. The following actions are available from the app bar in the deck list:" +msgstr "" + +#: src/deck-picker.md:69 +msgid "Navigation menu button" +msgstr "" + +#: src/deck-picker.md:70 +msgid "Tapping the icon on the far left will show the [left navigation menu](drawer.md#navigation-drawer) for quickly navigating between the main parts of the app." +msgstr "" + +#: src/deck-picker.md:72 +msgid "Sync button" +msgstr "" + +#: src/deck-picker.md:73 +msgid "The circular button with arrows on the right is for synchronizing your cards with the cloud, as described in the [adding decks from cloud](anki-desktop.md#using-anki-desktop-with-ankidroid) section." +msgstr "" + +#: src/deck-picker.md:75 +msgid "Overflow menu button" +msgstr "" + +#: src/deck-picker.md:76 +msgid "On the far right is the overflow menu which contains less commonly used actions. These actions are described further below." +msgstr "" + +#: src/deck-picker.md:78 +msgid "**Hint:** long tapping on a button in the app bar anywhere in the app will display a textual hint describing what the button does!" +msgstr "" + +#: src/deck-picker.md:80 +msgid "Studying a Deck" +msgstr "" + +#: src/deck-picker.md:81 +msgid "To study the cards in a deck, simply tap on the deck name (or the \"STUDY\" button on a 10\" tablet), and AnkiDroid will switch to study mode. " +msgstr "" + +#: src/deck-picker.md:83 +msgid "Note that the currently selected deck is highlighted with a grey background, and if you have any [filtered decks](filtered-deck.md#filtered-decks) they will be highlighted using a blue font. Filtered decks are discussed elsewhere in the manual." +msgstr "" + +#: src/deck-picker.md:85 +msgid "Other Deck Actions" +msgstr "" + +#: src/deck-picker.md:86 +msgid "Long tapping on a deck will show a list of other actions available to perform on that deck:" +msgstr "" + +#: src/deck-picker.md:88 +msgid "Rename deck" +msgstr "" + +#: src/deck-picker.md:89 +msgid "Use this option to rename a deck" +msgstr "" + +#: src/deck-picker.md:91 src/reviewer.md:46 +msgid "Deck options" +msgstr "" + +#: src/deck-picker.md:92 +msgid "Tapping on deck options allows you to configure various deck specific study options. Please see the [desktop documentation](https://docs.ankiweb.net/deck-options.html) for more information about these study options." +msgstr "" + +#: src/deck-picker.md:95 +msgid "Custom study" +msgstr "" + +#: src/deck-picker.md:96 +msgid "Allows you to choose from some convenient presets for studying outside of your normal schedule, for example increasing the study limit for the day. See the section on [filtered decks](filtered-deck.md#filtered-decks) for more detailed information." +msgstr "" + +#: src/deck-picker.md:98 +msgid "Delete deck" +msgstr "" + +#: src/deck-picker.md:99 +msgid "Use this option to delete a deck (note: this action is not reversible, although you can [restore from a backup](backups.md#automatic-backups)" +msgstr "" + +#: src/deck-picker.md:101 +msgid "Export deck" +msgstr "" + +#: src/deck-picker.md:102 +msgid "This option can be used to share a deck with other users. See the [exporting decks](exporting.md#exporting-anki-files) section for more information." +msgstr "" + +#: src/deck-picker.md:104 src/deck-overview.md:40 +msgid "Unbury" +msgstr "" + +#: src/deck-picker.md:105 src/deck-overview.md:41 +msgid "This option is only visible when the selected deck has cards that have been manually or automatically buried." +msgstr "" + +#: src/deck-picker.md:107 +msgid "Rebuild / Empty" +msgstr "" + +#: src/deck-picker.md:108 +msgid "If the selected deck is a [filtered decks](filtered-deck.md#filtered-decks) then you also have the option to rebuild or empty the cards in it." +msgstr "" + +#: src/deck-picker.md:111 +msgid "Clickable areas on the decks" +msgstr "" + +#: src/deck-picker.md:112 +msgid "Each deck in the list has three clickable areas:" +msgstr "" + +#: src/deck-picker.md:114 +msgid "Deck expander" +msgstr "" + +#: src/deck-picker.md:115 +msgid "If you are using [subdecks](https://docs.ankiweb.net/getting-started.html#decks), then a deck expander button may appear on the far left of the deck, which can be used to show / hide the subdecks. A ▶ icon means the deck has hidden subdecks which can be shown, a ▼ icon means the deck has visible subdecks that can be hidden, and no icon means that the deck has no subdecks. " +msgstr "" + +#: src/deck-picker.md:117 +msgid "**Note:** subdecks can be created by using the naming convention `PARENT::CHILD`." +msgstr "" + +#: src/deck-picker.md:119 +msgid "Deck name" +msgstr "" + +#: src/deck-picker.md:120 +msgid "This is the main clickable area, which will take you to the study screen if there are cards available to review." +msgstr "" + +#: src/deck-picker.md:122 +msgid "Count buttons" +msgstr "" + +#: src/deck-picker.md:123 +msgid "The count buttons on the far right of each deck act as a separate clickable area that takes you to the deck overview instead of the study screen. This can be useful if you want to quickly view the number of cards available in the deck." +msgstr "" + +#: src/deck-picker.md:125 +msgid "Advanced Actions" +msgstr "" + +#: src/deck-picker.md:126 +msgid "Some additional actions are located in the overflow menu for less common tasks, which are summarized below:" +msgstr "" + +#: src/deck-picker.md:128 src/reviewer.md:19 src/gestures.md:88 +#: src/keyboard-shortcuts.md:28 +msgid "Undo" +msgstr "" + +#: src/deck-picker.md:129 +msgid "After reviewing the last card in a study session, you can undo it from here." +msgstr "" + +#: src/deck-picker.md:131 +msgid "Check database" +msgstr "" + +#: src/deck-picker.md:132 +msgid "This can automatically fix a lot of problems with your database, and will also purge any unused tags. If you experience any problems with your collection, this is the first action you should try. " +msgstr "" + +#: src/deck-picker.md:134 +msgid "**NOTE:** Under some circumstances, check database will move cards to a deck named _!Recovered Cards_. If this occurs, please move the cards to an appropriate deck via the [card browser](browser.md#findingsearchingbrowsing), and delete _!Recovered Cards_ when it is empty." +msgstr "" + +#: src/deck-picker.md:136 +msgid "Check media" +msgstr "" + +#: src/deck-picker.md:137 +msgid "Try to run this if you experience any issues with media syncing." +msgstr "" + +#: src/deck-picker.md:139 +msgid "Empty cards" +msgstr "" + +#: src/deck-picker.md:140 +msgid "Remove any empty cards from your collection. See the [desktop documentation](https://docs.ankiweb.net/templates/generation.html#card-generation--deletion) for more." +msgstr "" + +#: src/deck-picker.md:142 +msgid "Restore from backup" +msgstr "" + +#: src/deck-picker.md:143 +msgid "Allows you to restore from one of AnkiDroid's [automatic backups](backups.md#automatic-backups)" +msgstr "" + +#: src/deck-picker.md:145 +msgid "Manage note types" +msgstr "" + +#: src/deck-picker.md:146 +msgid "Allows you to add, edit, and delete note types. See the [customizing card layout](advanced-features/customizing-card-layout.md) section for more help with this advanced feature.Keyboard Shortcuts" +msgstr "" + +#: src/deck-picker.md:148 +msgid "Import" +msgstr "" + +#: src/deck-picker.md:149 +msgid "Import a .apkg anki file containing a deck. See the [importing](importing/importing-anki-files.md) section for more." +msgstr "" + +#: src/deck-picker.md:151 +msgid "Export collection" +msgstr "" + +#: src/deck-picker.md:152 +msgid "Export entire collection as a collection.apkg file. See the [exporting](exporting.md) section for more." +msgstr "" + +#: src/deck-picker.md:154 +msgid "Deck Counts" +msgstr "" + +#: src/deck-picker.md:155 +msgid "Next to each deck, three numbers are displayed. The left, blue number, corresponds to how many new cards you have to learn today. Anki will introduce 20 new cards a day by default, and you can customize this number if you'd like. The red number in the middle is for the cards due to be studied today which are currently in the learning phase, and the green number is the cards which are due for review (i.e. cards which have already graduated from the learning phase). On a deck you've never studied before, these numbers will both be zero." +msgstr "" + +#: src/deck-picker.md:157 +msgid "As explained above, tapping on the counts will take you to the deck overview screen." +msgstr "" + +#: src/drawer.md:3 +msgid "![navigation_drawer.png](img/2-navigation_drawer.png)" +msgstr "" + +#: src/drawer.md:5 +msgid "The navigation drawer can be opened from most places in the application by pressing the left menu icon, or alternatively swiping outwards from anywhere on the far left side of the screen. It is used for quickly navigating between different parts of the application. You can switch to the following screens:" +msgstr "" + +#: src/drawer.md:9 +msgid "Decks" +msgstr "" + +#: src/drawer.md:10 +msgid "Takes you to the top level of the app where the list of cards are shown ([more info here](deck-picker.md))" +msgstr "" + +#: src/drawer.md:12 src/keyboard-shortcuts.md:8 src/keyboard-shortcuts.md:51 +msgid "Card Browser" +msgstr "" + +#: src/drawer.md:13 +msgid "Shows a list of all your cards ([more info here](browser.md))" +msgstr "" + +#: src/drawer.md:15 +msgid "Statistics" +msgstr "" + +#: src/drawer.md:16 +msgid "Helps you track your study progress ([more info in Anki manual](https://docs.ankiweb.net/stats.html#statistics) and [here](advanced-features/advanced-statistics.md))" +msgstr "" + +#: src/drawer.md:18 +msgid "Night mode" +msgstr "" + +#: src/drawer.md:19 +msgid "This switches the app to a dark theme which many users find is less straining on the eyes, particularly when reviewing in the dark. See the " +msgstr "" + +#: src/drawer.md:19 +msgid "wiki" +msgstr "" + +#: src/drawer.md:19 +msgid " for instructions on how to customize the card background and font color used in night mode." +msgstr "" + +#: src/drawer.md:21 +msgid "Settings" +msgstr "" + +#: src/drawer.md:22 +msgid "Allows you to customize the app ([more info here](settings.md))" +msgstr "" + +#: src/drawer.md:24 +msgid "Help" +msgstr "" + +#: src/drawer.md:25 +msgid "Opens this web page" +msgstr "" + +#: src/drawer.md:27 +msgid "Send feedback" +msgstr "" + +#: src/drawer.md:28 +msgid "Get support from the AnkiDroid team" +msgstr "" + +#: src/deck-overview.md:3 +msgid "[App bar](#app-bar)" +msgstr "" + +#: src/deck-overview.md:4 +msgid "[Ordinary decks](#ordinary-decks)" +msgstr "" + +#: src/deck-overview.md:5 +msgid "[Custom Study](#custom-study)" +msgstr "" + +#: src/deck-overview.md:6 +msgid "[Filtered decks](#filtered-decks)" +msgstr "" + +#: src/deck-overview.md:7 +msgid "[Empty deck](#empty-deck)" +msgstr "" + +#: src/deck-overview.md:8 +msgid "[Rebuild deck](#rebuild-deck)" +msgstr "" + +#: src/deck-overview.md:9 +msgid "[Overflow menu](#overflow-menu)" +msgstr "" + +#: src/deck-overview.md:10 +msgid "[Deck Options](#deck-options)" +msgstr "" + +#: src/deck-overview.md:13 +msgid "![deck_overview.png](img/3-deck_overview.png)" +msgstr "" + +#: src/deck-overview.md:15 +msgid "From the deck list, if you tap the counts area you will be taken to the deck overview screen. On tablets it is always shown in the area to the right of the deck list." +msgstr "" + +#: src/deck-overview.md:17 +msgid "On this screen you can view a summary of the deck, build custom study sessions, rebuild / empty filtered decks, and change deck options. When visible, pressing the study button will take you to the study screen for that deck." +msgstr "" + +#: src/deck-overview.md:19 +msgid "App bar" +msgstr "" + +#: src/deck-overview.md:20 +msgid "The icons that are shown in the app bar depend on whether your deck is an ordinary deck or a filtered deck." +msgstr "" + +#: src/deck-overview.md:22 +msgid "Ordinary decks" +msgstr "" + +#: src/deck-overview.md:24 +msgid "Custom Study" +msgstr "" + +#: src/deck-overview.md:25 +msgid "Tapping the wrench icon allows you to create a custom session, for example to do extra reviews outside your normal schedule, or study only certain cards inside a deck. See the [filtered deck section](filtered-deck.md) for more information on this." +msgstr "" + +#: src/deck-overview.md:27 +msgid "Filtered decks" +msgstr "" + +#: src/deck-overview.md:29 +msgid "Empty deck" +msgstr "" + +#: src/deck-overview.md:30 +msgid "Tapping the cross icon will empty all of the cards in the current filtered deck (i.e. return them to their original deck)." +msgstr "" + +#: src/deck-overview.md:32 +msgid "Rebuild deck" +msgstr "" + +#: src/deck-overview.md:33 +msgid "Tapping the rebuild icon will rebuild the current filtered deck according to the settings specified in filtered deck options." +msgstr "" + +#: src/deck-overview.md:35 +msgid "Overflow menu" +msgstr "" + +#: src/deck-overview.md:37 +msgid "Deck Options" +msgstr "" + +#: src/deck-overview.md:38 +msgid "Allows you to configure some options related to the current deck, such as the number of new cards and reviews to introduce each day. Please see the [desktop documentation](https://docs.ankiweb.net/deck-options.html) for more information about these study options." +msgstr "" + +#: src/reviewer.md:3 +msgid "Tapping on the deck name from the deck list, or the study button from the deck overview screen will take you to the study screen where you do your study. " +msgstr "" + +#: src/reviewer.md:5 +msgid "![reviewer.png](img/4-reviewer.png)" +msgstr "" + +#: src/reviewer.md:7 +msgid "Basics" +msgstr "" + +#: src/reviewer.md:8 +msgid "If you have not used Anki on a computer before, you may like to have a look at the first [intro video](https://docs.ankiweb.net/getting-started.html#videos) before reading on, as it explains the basic review process." +msgstr "" + +#: src/reviewer.md:10 +msgid "On the top left of the screen you'll see three numbers. From the left, these correspond to new cards, learning cards, and cards to review. These are explained in more detail in the intro videos for the desktop program, so please [check them out](https://docs.ankiweb.net/getting-started.html#videos) if you haven't already." +msgstr "" + +#: src/reviewer.md:12 +msgid "When you've looked at a card's question and remembered the answer, or decided you don't know it, tap the **show answer** button. When you do, the bottom area will change to display 2-4 answer buttons, depending on how you've answered the card previously. The buttons will display the time a card will next be shown, so 10m means **10 minutes** and **5d** means **5 days**. You can tap directly on these buttons to choose a particular answer. " +msgstr "" + +#: src/reviewer.md:14 +msgid "To make reviewing faster, you can configure gestures (for example taps and swipes) to answer cards without using the buttons. See the [preferences section](settings.md) for more information on configuring gestures." +msgstr "" + +#: src/reviewer.md:17 +msgid "The App Bar at the top of the study screen has several buttons for performing various common actions. The number of buttons which are shown is determined automatically by Android based on the size and resolution of your screen. If there is not enough space to show the button for a given action, then the action will be available from the menu instead. If you are unsure what a button does, you can long-tap on it to see the name of the action. The following action are available:" +msgstr "" + +#: src/reviewer.md:20 +msgid "Undo the answer you chose for the last card you studied (button always shown)." +msgstr "" + +#: src/reviewer.md:22 +msgid "Mark Card" +msgstr "" + +#: src/reviewer.md:23 +msgid "Adds a **marked** tag to the current note, so it can be easily found in the browser. This is useful when you want to take some action on the note at a later date, such as looking up a word when you get home. Marked cards also show a small star in the upper-right-hand corner during reviews." +msgstr "" + +#: src/reviewer.md:26 +msgid "Flag Card" +msgstr "" + +#: src/reviewer.md:27 +msgid "Adds a color coded **flag** (red, orange, green, or blue) This can be used as a general purpose indicator to differentiate your cards. Flags are represented by a number from 1-4, corresponding to the previously listed colors." +msgstr "" + +#: src/reviewer.md:30 +msgid "Edit Card" +msgstr "" + +#: src/reviewer.md:31 +msgid "Open the edit note screen, where you can change the content displayed on the flashcard (see the [editing notes section](editing-notes.md) for more help)" +msgstr "" + +#: src/reviewer.md:33 +msgid "Hide / Delete" +msgstr "" + +#: src/reviewer.md:34 +msgid "Give options to bury, suspend, or delete the current note or card" +msgstr "" + +#: src/reviewer.md:36 +msgid "**Bury card / Bury note:** Hides a card or all of the note’s cards from review until the next day. (If you want to unbury cards before then, you can choose “unbury” from the long-press menu in the [deck list](deck-picker.md), or from the [deck overview screen](deck-overview.md).) This is useful if you cannot answer the card at the moment or you want to come back to it another time. Burying can also happen automatically for cards of the same note. If cards were in learning when they are buried, they are moved back to the new card queue or review queue prior to being buried." +msgstr "" + +#: src/reviewer.md:37 +msgid "**Suspend card / Suspend note:** Hides a card or all of the note’s cards from review until they are manually unsuspended (by long-tapping a card in the [card browser](browser.md)). This is useful if you want to avoid reviewing the note for some time, but don’t want to delete it. If cards were in learning when they are suspended, they are moved back to the new card queue or review queue prior to being suspended." +msgstr "" + +#: src/reviewer.md:38 +msgid "**Delete note:** Deletes the note and all of its cards." +msgstr "" + +#: src/reviewer.md:40 +msgid "Replay Audio" +msgstr "" + +#: src/reviewer.md:41 +msgid "If the card has audio on the front or back, it will be played again." +msgstr "" + +#: src/reviewer.md:43 +msgid "Enable / Disable Whiteboard" +msgstr "" + +#: src/reviewer.md:44 +msgid "This action enables or disables the whiteboard feature for the current deck. The whiteboard feature allows you to draw on the screen, which is particularly useful for practicing drawing characters from languages such as Japanese. When the whiteboard has been enabled for the current deck, two new actions will become available for clearing and hiding the whiteboard. Disabling the whiteboard will hide these actions as well as the whiteboard itself." +msgstr "" + +#: src/reviewer.md:47 +msgid "Open the deck specific study options. See the [desktop documentation](https://docs.ankiweb.net/deck-options.html) for more information about these study options." +msgstr "" + +#: src/reviewer.md:49 +msgid "Check Pronunciation" +msgstr "" + +#: src/reviewer.md:50 +msgid "This action enables or disables the temporary audio recorder toolbar at the top of the card. This feature allows you to record your voice and replay it. It is used primarily to check your pronunciation. This toolbar is composed of three buttons: play, stop playing and record microphone audio. This tool can be used while viewing either the question or the answer." +msgstr "" + +#: src/reviewer.md:52 +msgid "Reaching the end of the study session" +msgstr "" + +#: src/reviewer.md:53 +msgid "When you've finished the cards that are due to be studied today, you'll be taken back to the decks list and shown a congratulations message. From here you can select a different deck, or if you've finished studying for the day, you can simply tap the home button in order to close AnkiDroid (and you can also do this in the middle of reviews if you wish)." +msgstr "" + +#: src/reviewer.md:55 +msgid "If you wish to keep studying the same deck further, tap on the deck again which will give you several options for continued study. Please see the [filtered deck](filtered-deck.md) section for more on custom study." +msgstr "" + +#: src/adding-notes.md:3 +msgid "[Type](#type)" +msgstr "" + +#: src/adding-notes.md:4 +msgid "[Deck](#deck)" +msgstr "" + +#: src/adding-notes.md:5 +msgid "[Fields](#fields)" +msgstr "" + +#: src/adding-notes.md:6 +msgid "[Media Buttons](#media-buttons)" +msgstr "" + +#: src/adding-notes.md:7 +msgid "[Tags](#tags)" +msgstr "" + +#: src/adding-notes.md:8 +msgid "[Cards](#cards)" +msgstr "" + +#: src/adding-notes.md:10 +msgid "__Note:__ _This section onwards assumes you understand what [notes, fields, card templates, and note types](https://docs.ankiweb.net/getting-started.html#notes--fields) are_" +msgstr "" + +#: src/adding-notes.md:12 +msgid "To add a new note, tap the **+** button at the bottom of the deck list and choose **Add**." +msgstr "" + +#: src/adding-notes.md:14 +msgid "![adding.png](img/5-adding.png)" +msgstr "" + +#: src/adding-notes.md:16 +msgid "The following controls are available in the add note screen:" +msgstr "" + +#: src/adding-notes.md:18 +msgid "Type" +msgstr "" + +#: src/adding-notes.md:19 +msgid "Allows you to select the type of note you'd like to add. For most purposes the **Basic** note type is sufficient, but for example if you would like an extra card generated which is the reverse of the main card (i.e. shows the **Back** field on the front of the card), you could chose the **Basic (and reversed card)** note type." +msgstr "" + +#: src/adding-notes.md:22 +msgid "Deck" +msgstr "" + +#: src/adding-notes.md:23 +msgid "Allows you to change the deck the generated card/cards will be added to." +msgstr "" + +#: src/adding-notes.md:25 +msgid "Fields" +msgstr "" + +#: src/adding-notes.md:26 +msgid "Below the deck selector are the fields for the note (for example the **Basic** note type has two fields **Front** and **Back**). When you tap on a field, a keyboard will come up, allowing you to type in information." +msgstr "" + +#: src/adding-notes.md:28 +msgid "Media Buttons" +msgstr "" + +#: src/adding-notes.md:29 +msgid "Next to each field is an attach icon, which allows you to add media to your note (this feature is currently in the experimental phase). \n" +"Add image lets you add images either via your device's camera (if it has one), or from your photo library. Record audio allows you to record your voice and place it into a field. The advanced editor lets you automatically search for translations or pronunciation audio files online." +msgstr "" + +#: src/adding-notes.md:33 +msgid "Tags" +msgstr "" + +#: src/adding-notes.md:34 +msgid "Brings up a dialog which lets you add / remove tags from the note." +msgstr "" + +#: src/adding-notes.md:36 +msgid "Cards" +msgstr "" + +#: src/adding-notes.md:37 +msgid "Shows the names of the cards which will be generated for the selected note type. Tapping on this button will bring up a dialog which lets you preview the source code for the card template of the selected note type. From here you can edit, preview, add, and delete card templates. See the [cards and templates section](https://docs.ankiweb.net/templates/intro.html) of the Anki Desktop manual for more information about card templates." +msgstr "" + +#: src/adding-notes.md:39 +msgid "Long press in a text entry field to add a cloze deletion around the selected text, or an empty cloze deletion if there is no selected text." +msgstr "" + +#: src/adding-notes.md:41 +msgid "When you've finished typing in the content of a note, tap the tick icon in the app bar at the top to add it to your collection. Alternatively, if you want to go back to what you were doing without saving, you can tap the app icon, or use the hardware back button." +msgstr "" + +#: src/editing-notes.md:2 +msgid "The edit note screen can be opened by choosing edit while reviewing, or by opening a card in the browser. The edit screen is similar to the add new note screen mentioned above, with some key differences:" +msgstr "" + +#: src/editing-notes.md:5 +msgid "Changing the deck operates on the selected card (which is underlined in the **Cards** box). If a note type is chosen which has more than one card, only the currently selected card will be moved to the new deck." +msgstr "" + +#: src/editing-notes.md:8 +msgid "Changing the **Type** dropdown selector changes to the note type edit mode. In this mode, editing the content of the note (i.e. deck, fields, etc) is disabled, and if a custom note type with more than two fields is being used, additional buttons will appear which let you control the mapping of the fields to the new note type." +msgstr "" + +#: src/editing-notes.md:11 +msgid "If a note type is selected which has less cards than the original note type, only the first n cards will be kept. For example changing from **Basic (and reversed card)** to **Basic** will lead to only the first card being kept. To warn you of this, the text in the **Cards** box will appear red, and a confirmation dialog will be shown before the note is saved." +msgstr "" + +#: src/editing-notes.md:14 +msgid "Hint: to change the type for multiple notes in one go, or to customize the mapping between cards, use the **Change note type** option in the browser on Anki Desktop." +msgstr "" + +#: src/editing-notes.md:16 +msgid "There are also several advanced options available in the main menu:" +msgstr "" + +#: src/editing-notes.md:18 +msgid "Add note" +msgstr "" + +#: src/editing-notes.md:19 +msgid "Create a new empty note" +msgstr "" + +#: src/editing-notes.md:21 +msgid "Copy card" +msgstr "" + +#: src/editing-notes.md:22 +msgid "Copy the current note to a new editable note" +msgstr "" + +#: src/editing-notes.md:24 +msgid "Reset progress" +msgstr "" + +#: src/editing-notes.md:25 +msgid "Move the card to the end of the new card queue. The current state of the card is cleared, but not its revision history." +msgstr "" + +#: src/editing-notes.md:27 src/keyboard-shortcuts.md:59 +msgid "Reschedule" +msgstr "" + +#: src/editing-notes.md:28 +msgid "Allows you to reschedule as a review card on a given date. This is useful if you have imported already-learnt material, and you want to start it off with higher initial intervals." +msgstr "" + +#: src/browser.md:9 +msgid "[Searching](#searching)" +msgstr "" + +#: src/browser.md:10 +msgid "[tag:marked](#tagmarked)" +msgstr "" + +#: src/browser.md:11 +msgid "[is:due](#isdue)" +msgstr "" + +#: src/browser.md:12 +msgid "[front:rabbit](#frontrabbit)" +msgstr "" + +#: src/browser.md:13 +msgid "[flag:1](#flag1)" +msgstr "" + +#: src/browser.md:15 +msgid "You can search for or browse cards by tapping the **Card browser** button from the [navigation drawer](drawer.md)." +msgstr "" + +#: src/browser.md:17 +msgid "![img/6-browser.png](img/6-browser.png)" +msgstr "" + +#: src/browser.md:19 +msgid "The browser screen starts by displaying all the cards in the currently selected deck. You can search for cards in the selected deck by tapping the magnifying glass icon in the top. You can change the selected deck (or change to all decks) by choosing the deck from the dropdown list on the top left." +msgstr "" + +#: src/browser.md:21 +msgid "By default, the first column in the browser gives the text which will be shown on the question (i.e. front side) of the flashcard, and the second column shows the text from the answer (i.e. the back side) of the flashcard. " +msgstr "" + +#: src/browser.md:23 +msgid "The first column can also be configured to show the [sort field](https://docs.ankiweb.net/editing.html#customizing-fields) for a more compact display. The second column can be configured to show many different parameters by tapping the drop down menu in the column heading. " +msgstr "" + +#: src/browser.md:25 +msgid "Note that the content of the columns is dynamically calculated as your scroll through the list of the cards." +msgstr "" + +#: src/browser.md:27 +msgid "From the search results, you can tap on a card to edit it (see the [edit note section](editing-notes.md) above), or long-tapping on it will show a menu allowing you to perform the following actions:" +msgstr "" + +#: src/browser.md:29 +msgid "Mark / unmark note" +msgstr "" + +#: src/browser.md:30 +msgid "Add / remove the **marked** tag from the note. Cards with a marked note are highlighted in purple." +msgstr "" + +#: src/browser.md:32 +msgid "Flag card" +msgstr "" + +#: src/browser.md:33 +msgid "Change or remove the color coded **flag** on the card. Cards with a flag are highlighted in the flags color." +msgstr "" + +#: src/browser.md:35 +msgid "Suspend / unsuspend card" +msgstr "" + +#: src/browser.md:36 +msgid "Suspended cards are highlighted in yellow, and are not shown during review." +msgstr "" + +#: src/browser.md:38 src/gestures.md:107 +msgid "Delete note" +msgstr "" + +#: src/browser.md:39 +msgid "Delete the note of the currently selected card, and all cards belonging to that note. This action cannot be undone without [restoring from backup](backups.md)." +msgstr "" + +#: src/browser.md:41 +msgid "Preview" +msgstr "" + +#: src/browser.md:42 +msgid "Render the currently selected card so that you can see what it looks like in the reviewer." +msgstr "" + +#: src/browser.md:44 +msgid "Select multiple cards" +msgstr "" + +#: src/browser.md:45 +msgid "Long-tapping on a single card will select the single card. While that card is selected, if you long-tap on another card on your screen, then all of the cards between the first selected card and the last card will be selected. This allows for actions to be performed on multiple cards at once." +msgstr "" + +#: src/browser.md:47 +msgid "Searching" +msgstr "" + +#: src/browser.md:48 +msgid "AnkiDroid supports all the search strings that the desktop version of Anki does, allowing you to perform quite complex searches. Some examples:" +msgstr "" + +#: src/browser.md:50 +msgid "tag:marked" +msgstr "" + +#: src/browser.md:51 +msgid "show cards that with the tag **marked**" +msgstr "" + +#: src/browser.md:53 +msgid "is:due" +msgstr "" + +#: src/browser.md:54 +msgid "show only cards that are waiting for review" +msgstr "" + +#: src/browser.md:56 +msgid "front:rabbit" +msgstr "" + +#: src/browser.md:57 +msgid "show only cards where the front field is exactly **rabbit** " +msgstr "" + +#: src/browser.md:59 +msgid "flag:1" +msgstr "" + +#: src/browser.md:60 +msgid "show only cards marked with a red flag" +msgstr "" + +#: src/browser.md:62 +msgid "For a full list of the possibilities, please see the section in the [desktop manual](https://docs.ankiweb.net/searching.html)." +msgstr "" + +#: src/browser.md:64 +msgid "Alternatively, some more commonly used filters (marked, suspended, and tagged cards) can be quickly applied without manually typing them by choosing them from the overflow menu. You can also save and recall common search queries from the menu." +msgstr "" + +#: src/filtered-deck.md:3 +msgid "Anki is designed to optimize the learning process, so that you study the minimum amount necessary to remember the majority of your cards. Once the congratulations screen is reached, further study becomes a case of diminishing returns: the amount of extra time spent going over the same cards again is generally not worth the moderate increase in retention you'll see." +msgstr "" + +#: src/filtered-deck.md:5 +msgid "That said, if you have a test looming, or simply want to pass some time, it's possible to keep reviewing even after you are shown the congratulations message." +msgstr "" + +#: src/filtered-deck.md:7 +msgid "A **filtered deck** is a temporary deck that contains cards based on various criteria, such as **forgotten today**, `is tagged 'hard'`, and so on. After studying cards in a filtered deck, or when the filtered deck is deleted, the cards are automatically returned to their original deck." +msgstr "" + +#: src/filtered-deck.md:9 +msgid "The easiest way to create a filtered deck is by long clicking on a deck and choosing the **custom study** option. " +msgstr "" + +#: src/filtered-deck.md:11 +msgid "Advanced users can create a filtered deck manually, by choosing **Create filtered deck** from the overflow menu in the deck list screen." +msgstr "" + +#: src/filtered-deck.md:13 +msgid "For further information on filtered decks, please see the [desktop documentation](https://docs.ankiweb.net/filtered-decks.html#filtered-decks--cramming)." +msgstr "" + +#: src/importing/importing-anki-files.md:3 +msgid "You can import Anki files (with .apkg file format) directly into AnkiDroid. Other file formats cannot be imported directly into AnkiDroid, however flashcards from most other applications can be imported into Anki Desktop on your computer, which can then be [added into AnkiDroid in the usual way](../anki-desktop.md). See the [importing section of the Anki Desktop manual](https://docs.ankiweb.net/importing/intro.html) for help on importing into Anki Desktop." +msgstr "" + +#: src/importing/importing-anki-files.md:6 +msgid "As in Anki Desktop, AnkiDroid distinguishes between [the two types of .apkg files](https://docs.ankiweb.net/exporting.html) (**collection package** and **deck package**) based on the filename. Collection packages have the name **collection.colpkg**, and when imported will completely _replace all contents_ in AnkiDroid. Any apkg file which is **_not_** named something that ends in **.colpkg** will be treated as a deck package, which will be _merged with any existing content_ when imported into to AnkiDroid." +msgstr "" + +#: src/importing/importing-anki-files.md:8 +msgid "You can import .apkg Anki collection files into AnkiDroid either by opening them using the standard Android system, or by manually importing them from within AnkiDroid:" +msgstr "" + +#: src/importing/importing-anki-files.md:10 +msgid "Open the file using Android" +msgstr "" + +#: src/importing/importing-anki-files.md:11 +msgid "Apkg files are automatically associated with AnkiDroid, so for example if you open a .apkg email attachment which you sent to yourself, then AnkiDroid will automatically open the file and confirm if you want to import it. Simply click OK and the apkg file will be imported." +msgstr "" + +#: src/importing/importing-anki-files.md:13 +msgid "Import the file manually in AnkiDroid" +msgstr "" + +#: src/importing/importing-anki-files.md:14 +msgid "You can also manually import .apkg files as follows:" +msgstr "" + +#: src/importing/importing-anki-files.md:16 +msgid "Connect your device to your computer using USB" +msgstr "" + +#: src/importing/importing-anki-files.md:17 +msgid "Copy the .apkg from your computer to the AnkiDroid folder on your device" +msgstr "" + +#: src/importing/importing-anki-files.md:18 +msgid "Open AnkiDroid on your device" +msgstr "" + +#: src/importing/importing-anki-files.md:19 +msgid "From the main menu in the deck list, choose _Import_" +msgstr "" + +#: src/importing/importing-anki-files.md:20 +msgid "Choose the apkg file you just copied to your device when prompted" +msgstr "" + +#: src/importing/importing-anki-files.md:21 +msgid "Tap OK" +msgstr "" + +#: src/importing/importing-anki-databases.md:3 +msgid "AnkiDroid does not support directly importing Anki database (`.anki2`) files. A database import will replace your collection with the contents the provided file. If you want to perform a full replacement, you should import a `collection[.apkg/.colpkg]` created in the app with the export function." +msgstr "" + +#: src/importing/importing-anki-databases.md:5 +msgid "Importing anki2 files manually" +msgstr "" + +#: src/importing/importing-anki-databases.md:7 +msgid "This is not officially supported, but `.anki2` files can manually be imported if needed, in cases of troubleshooting for example:" +msgstr "" + +#: src/importing/importing-anki-databases.md:9 +msgid "Create a new folder on your Android file system" +msgstr "" + +#: src/importing/importing-anki-databases.md:10 +msgid "Obtain the full path to the folder as provided by your file manager, this will typically appear as: `/storage/emulated/0/`" +msgstr "" + +#: src/importing/importing-anki-databases.md:11 +msgid "Place the `.anki2` file in the newly created folder" +msgstr "" + +#: src/importing/importing-anki-databases.md:12 +msgid "Rename the file to `collection.anki2`" +msgstr "" + +#: src/importing/importing-anki-databases.md:13 +msgid "(If applicable) Temporarily log out of your AnkiWeb account: `Settings - AnkiDroid - AnkiWeb account`" +msgstr "" + +#: src/importing/importing-anki-databases.md:14 +msgid "Open `Settings - Advanced - AnkiDroid Directory` and set the AnkiDroid Directory to the newly created folder." +msgstr "" + +#: src/exporting.md:3 +msgid "AnkiDroid can export your flashcards in the .apkg Anki file format so that you can import them into Anki Desktop, or share them with other people. As in Anki Desktop, you can either export a [collection package or deck package](https://docs.ankiweb.net/exporting.html#packaged-decks), depending on what you are trying to achieve." +msgstr "" + +#: src/exporting.md:6 +msgid "There are two export options available: **include scheduling information** and **include media**. Generally the default options are sufficient, if you choose not to include scheduling information, Anki will assume that you are sharing the deck with other people, and will remove marked and leech tags so that they will have a clean copy of it." +msgstr "" + +#: src/exporting.md:8 +msgid "Exporting collection package" +msgstr "" + +#: src/exporting.md:9 +msgid "When exporting for use in Anki Desktop, you generally want to [export your entire collection](https://docs.ankiweb.net/exporting.html#collection-colpkg), including all your review history etc. " +msgstr "" + +#: src/exporting.md:11 src/exporting.md:28 +msgid "From the main menu in the decks screen:" +msgstr "" + +#: src/exporting.md:13 +msgid "Tap the **Export** item in the menu." +msgstr "" + +#: src/exporting.md:14 +msgid "Tap **OK** using default options" +msgstr "" + +#: src/exporting.md:15 +msgid "Tap **OK** again to email the exported collection.apkg file to yourself, or alternatively you can manually copy to your computer using USB" +msgstr "" + +#: src/exporting.md:17 +msgid "To import the file on your computer:" +msgstr "" + +#: src/exporting.md:19 +msgid "Save the file **collection.apkg** to your desktop" +msgstr "" + +#: src/exporting.md:20 +msgid "Double-click on the file to start Anki." +msgstr "" + +#: src/exporting.md:21 +msgid "Confirm you wish to replace, so that the deck from your mobile device overwrites the old data on your desktop." +msgstr "" + +#: src/exporting.md:23 +msgid "After importing, you can delete the apkg file on your desktop if you wish." +msgstr "" + +#: src/exporting.md:25 +msgid "Exporting deck package" +msgstr "" + +#: src/exporting.md:26 +msgid "If you want to share a deck in AnkiDroid with another user, you can export a deck package. " +msgstr "" + +#: src/exporting.md:30 +msgid "Long tap on the deck you wish to export" +msgstr "" + +#: src/exporting.md:31 +msgid "Tap **Export**" +msgstr "" + +#: src/exporting.md:32 +msgid "Tap **OK** using the default options" +msgstr "" + +#: src/exporting.md:33 +msgid "Tap **OK** again to email the exported apkg to another user" +msgstr "" + +#: src/backups.md:3 +msgid "AnkiDroid will automatically create backups of your collection for you. The backups include all your cards and statistics, but do not include sounds or images." +msgstr "" + +#: src/backups.md:5 +msgid "The backup is taken in the background when you first start the app. A backup will only happen if more than 5 hours has elapsed since the last time a backup was created. By default, AnkiDroid will store the last 8 backups; this number can be changed in the main settings." +msgstr "" + +#: src/backups.md:8 +msgid "You can restore a backup by choosing the _restore from backup_ option from the main menu of the [decks screen](deck-picker.md)." +msgstr "" + +#: src/settings.md:3 +msgid "[AnkiDroid](#ankidroid)" +msgstr "" + +#: src/settings.md:4 +msgid "[AnkiWeb account](#ankiweb-account)" +msgstr "" + +#: src/settings.md:5 +msgid "[Fetch media on sync](#fetch-media-on-sync)" +msgstr "" + +#: src/settings.md:6 +msgid "[Automatic synchronization](#automatic-synchronization)" +msgstr "" + +#: src/settings.md:7 +msgid "[Deck for new cards](#deck-for-new-cards)" +msgstr "" + +#: src/settings.md:8 +msgid "[Language](#language)" +msgstr "" + +#: src/settings.md:9 +msgid "[Error reporting mode](#error-reporting-mode)" +msgstr "" + +#: src/settings.md:10 +msgid "[Notifications](#notifications)" +msgstr "" + +#: src/settings.md:11 +msgid "[Notify when](#notify-when)" +msgstr "" + +#: src/settings.md:12 +msgid "[Vibrate](#vibrate)" +msgstr "" + +#: src/settings.md:13 +msgid "[Blink light](#blink-light)" +msgstr "" + +#: src/settings.md:14 +msgid "[Reviewing](#reviewing)" +msgstr "" + +#: src/settings.md:15 +msgid "[New card position](#new-card-position)" +msgstr "" + +#: src/settings.md:16 +msgid "[Start of next day](#start-of-next-day)" +msgstr "" + +#: src/settings.md:17 +msgid "[Learn ahead limit](#learn-ahead-limit)" +msgstr "" + +#: src/settings.md:18 +msgid "[Timebox limit](#timebox-limit)" +msgstr "" + +#: src/settings.md:19 +msgid "[Display](#display)" +msgstr "" + +#: src/settings.md:20 +msgid "[Keep screen on](#keep-screen-on)" +msgstr "" + +#: src/settings.md:21 +msgid "[Fullscreen mode](#fullscreen-mode)" +msgstr "" + +#: src/settings.md:22 +msgid "[Center align](#center-align)" +msgstr "" + +#: src/settings.md:23 +msgid "[Show button time](#show-button-time)" +msgstr "" + +#: src/settings.md:24 +msgid "[Card zoom](#card-zoom)" +msgstr "" + +#: src/settings.md:25 +msgid "[Image zoom](#image-zoom)" +msgstr "" + +#: src/settings.md:26 +msgid "[Answer button size](#answer-button-size)" +msgstr "" + +#: src/settings.md:27 +msgid "[Show remaining](#show-remaining)" +msgstr "" + +#: src/settings.md:28 +msgid "[Whiteboard](#whiteboard)" +msgstr "" + +#: src/settings.md:29 +msgid "[Stroke width](#stroke-width)" +msgstr "" + +#: src/settings.md:30 +msgid "[Black strokes](#black-strokes)" +msgstr "" + +#: src/settings.md:31 +msgid "[Automatic display answer](#automatic-display-answer)" +msgstr "" + +#: src/settings.md:32 +msgid "[Time to show answer](#time-to-show-answer)" +msgstr "" + +#: src/settings.md:33 +msgid "[Time to show next question](#time-to-show-next-question)" +msgstr "" + +#: src/settings.md:34 +msgid "[Fonts](#fonts)" +msgstr "" + +#: src/settings.md:35 +msgid "[Default font](#default-font)" +msgstr "" + +#: src/settings.md:36 +msgid "[Default font applicability](#default-font-applicability)" +msgstr "" + +#: src/settings.md:37 +msgid "[Browser and editor font](#browser-and-editor-font)" +msgstr "" + +#: src/settings.md:38 +msgid "[Card browser font scaling](#card-browser-font-scaling)" +msgstr "" + +#: src/settings.md:40 +msgid "The preferences screen can be accessed by opening the navigation drawer, and choosing **Settings**. It allows you to customize various application settings and how AnkiDroid appears." +msgstr "" + +#: src/settings.md:42 +msgid "The Preferences screen is divided up into different sections, which are covered below." +msgstr "" + +#: src/settings.md:44 +msgid "AnkiDroid" +msgstr "" + +#: src/settings.md:45 +msgid "These are the general settings which affect the whole app:" +msgstr "" + +#: src/settings.md:47 +msgid "AnkiWeb account" +msgstr "" + +#: src/settings.md:48 +msgid "Change the account used for syncing with the cloud. For more information on syncing, please see [this section](anki-desktop.md)." +msgstr "" + +#: src/settings.md:50 +msgid "Fetch media on sync" +msgstr "" + +#: src/settings.md:51 +msgid "By default, AnkiDroid will sync sounds and images as well as your cards and review history. If you disable this option, sounds and images will not be downloaded from or uploaded to the sync server by AnkiDroid." +msgstr "" + +#: src/settings.md:54 +msgid "Automatic synchronization" +msgstr "" + +#: src/settings.md:55 +msgid "Enable this option if you want AnkiDroid to sync every time you open and close the app. There is a limit of once every ten minutes for this behavior. Once a sync begins you can cancel it by pressing your device's back button, however it can take some time for the cancellation to take effect." +msgstr "" + +#: src/settings.md:57 +msgid "Users that want more fine-grained control over when sync occurred might like to use a 3rd party app like Tasker to automate synchronization. See the " +msgstr "" + +#: src/settings.md:57 +msgid "API documentation" +msgstr "" + +#: src/settings.md:57 +msgid " for more information on this." +msgstr "" + +#: src/settings.md:59 +msgid "Deck for new cards" +msgstr "" + +#: src/settings.md:60 +msgid "The default of **Use current deck** means that Anki saves the last-used note type for each deck and selects it again then next time you choose the deck (and, in addition, will start with the current deck selected when choosing Add from anywhere). The other option, **Decide by note type,** saves the last-used deck for each note type (and opens the add window to the last-used note type when you choose Add). This may be more convenient if you always use a single note type for each deck." +msgstr "" + +#: src/settings.md:62 +msgid "Language" +msgstr "" + +#: src/settings.md:63 +msgid "Change the language. Note: AnkiDroid translations are contributed by volunteers. If you find missing or incorrect translations, feel free to contribute to the translation project. More details can be found on the " +msgstr "" + +#: src/settings.md:63 +msgid "AnkiDroid Wiki" +msgstr "" + +#: src/settings.md:63 src/advanced-features/custom-fonts.md:15 +msgid "." +msgstr "" + +#: src/settings.md:65 +msgid "Error reporting mode" +msgstr "" + +#: src/settings.md:66 +msgid "Control whether or not AnkiDroid asks your permission before sending error reports to our error reporting system when AnkiDroid crashes. You can also disable the reporting feature entirely if you wish." +msgstr "" + +#: src/settings.md:68 +msgid "Notifications" +msgstr "" + +#: src/settings.md:69 +msgid "This subsection allows you configure when and how AnkiDroid shows alerts in the Android notification bar." +msgstr "" + +#: src/settings.md:71 +msgid "Notify when" +msgstr "" + +#: src/settings.md:72 +msgid "**Never notify** will disable all notifications from AnkiDroid. **Pending messages available** will only show important status updates like when a sync completed. **More than n cards due** will show a notification when you have more than n cards due (requires the widget to be enabled)." +msgstr "" + +#: src/settings.md:74 +msgid "Vibrate" +msgstr "" + +#: src/settings.md:75 +msgid "Checking this will make your device vibrate when showing a notification" +msgstr "" + +#: src/settings.md:77 +msgid "Blink light" +msgstr "" + +#: src/settings.md:78 +msgid "Checking this will make your device light blink when an unread notification exists (if your device has a notification LED)" +msgstr "" + +#: src/settings.md:81 +msgid "Reviewing" +msgstr "" + +#: src/settings.md:83 +msgid "The reviewing screen allows you to customize how AnkiDroid behaves when you're reviewing cards. Note that only the reviewing settings which are applied to **all decks** are shown here. There are more settings related to reviewing which are **deck specific**. These deck specific settings are located in **Deck options**." +msgstr "" + +#: src/settings.md:86 +msgid "New card position" +msgstr "" + +#: src/settings.md:87 +msgid "Controls when new cards are shown: either mixed with, after, or before all reviews." +msgstr "" + +#: src/settings.md:89 +msgid "Start of next day" +msgstr "" + +#: src/settings.md:90 +msgid "Controls when AnkiDroid should start showing the next day's cards. The default setting of 4AM ensures that if you're studying around midnight, you won't have two days worth of cards shown to you in one session. If you stay up very late or wake up very early, you may want to adjust this to a time you're usually sleeping." +msgstr "" + +#: src/settings.md:93 +msgid "Learn ahead limit" +msgstr "" + +#: src/settings.md:94 +msgid "The Learn ahead limit tells AnkiDroid how to behave when there is nothing left to study in the current deck but cards in learning. The default setting of 20 minutes tells AnkiDroid that cards should be shown early if they are due to be shown in less than 20 minutes and there's nothing else to do. If you set this to 0, Anki will always wait the full period, showing the congratulations screen until the remaining cards are ready to be reviewed." +msgstr "" + +#: src/settings.md:96 +msgid "Timebox limit" +msgstr "" + +#: src/settings.md:97 +msgid "Timeboxing is a technique to help you focus by dividing a longer activity (such as a 30 minute study session) into smaller blocks. If you set the timebox time limit to a non-zero number of minutes, AnkiDroid will periodically show a message saying you how many cards you've managed to study during the prescribed time limit." +msgstr "" + +#: src/settings.md:99 +msgid "Display" +msgstr "" + +#: src/settings.md:100 +msgid "This subsection relates to the way cards are displayed during reviewing" +msgstr "" + +#: src/settings.md:102 +msgid "Keep screen on" +msgstr "" + +#: src/settings.md:103 +msgid "Ignore the automatic screen timeout setting in Android to always keep the screen on." +msgstr "" + +#: src/settings.md:105 +msgid "Fullscreen mode" +msgstr "" + +#: src/settings.md:106 +msgid "Switches to an immersive fullscreen mode so that you can use more of the screen. You can choose between **Hide the system bars** which will hide the system status bar, action bar, and bottom navigation buttons. Alternatively you can choose **Hide the system bars and answer buttons**, which will hide everything except for the actual card content itself. You can temporarily exit fullscreen mode by swiping inwards (i.e. down or up) from the system bars." +msgstr "" + +#: src/settings.md:108 +msgid "_Note that immersive fullscreen mode is only supported on Android 4.4+_" +msgstr "" + +#: src/settings.md:110 +msgid "Center align" +msgstr "" + +#: src/settings.md:111 +msgid "By default AnkiDroid tries to show cards exactly as they are shown on Anki Desktop, however if you prefer your cards to be center aligned vertically in AnkiDroid then you can enable this feature." +msgstr "" + +#: src/settings.md:113 +msgid "Show button time" +msgstr "" + +#: src/settings.md:114 +msgid "By default, the answer buttons will display the time a card will next be shown. If you disable this option, the times will not appear, and only labels like **Again**, **Good** and **Easy** will be shown." +msgstr "" + +#: src/settings.md:116 +msgid "Card zoom" +msgstr "" + +#: src/settings.md:117 +msgid "Here you can increase the zoom level of the card content (excluding images). You can use this option if you want to increase the font size for all cards." +msgstr "" + +#: src/settings.md:119 +msgid "Image zoom" +msgstr "" + +#: src/settings.md:120 +msgid "Here you can increase the zoom level of any images embedded in your cards." +msgstr "" + +#: src/settings.md:122 +msgid "Answer button size" +msgstr "" + +#: src/settings.md:123 +msgid "If you find it difficult to press the answer button, you can use this setting to make it bigger." +msgstr "" + +#: src/settings.md:125 +msgid "Show remaining" +msgstr "" + +#: src/settings.md:126 +msgid "Disabling this allows you to hide the card count in the top left of the screen." +msgstr "" + +#: src/settings.md:128 +msgid "Whiteboard" +msgstr "" + +#: src/settings.md:129 +msgid "This subsection controls the whiteboard in the reviewer. Note: the whiteboard must be enabled in each deck individually from the menu in the study screen." +msgstr "" + +#: src/settings.md:132 +msgid "Stroke width" +msgstr "" + +#: src/settings.md:133 +msgid "Control the stroke width of the whiteboard. Reducing the stroke width may allow you to draw with more detail." +msgstr "" + +#: src/settings.md:135 +msgid "Black strokes" +msgstr "" + +#: src/settings.md:136 +msgid "Use black strokes instead of color, which may reduce memory usage. Note: this setting doesn't apply when night mode is enabled." +msgstr "" + +#: src/settings.md:138 +msgid "Automatic display answer" +msgstr "" + +#: src/settings.md:139 +msgid "The automatic display answer feature allows you to have the answer shown automatically after some timeout period. You can also have the next question shown automatically; in this case the card is assumed to be failed (i.e. the again button is automatically chosen)" +msgstr "" + +#: src/settings.md:141 +msgid "Time to show answer" +msgstr "" + +#: src/settings.md:142 +msgid "Time to wait until answer is automatically shown" +msgstr "" + +#: src/settings.md:144 +msgid "Time to show next question" +msgstr "" + +#: src/settings.md:145 +msgid "Time to wait until next question is automatically shown." +msgstr "" + +#: src/settings.md:147 +msgid "Fonts" +msgstr "" + +#: src/settings.md:148 +msgid "In this screen you can change the font used by AnkiDroid, and some scaling options related to fonts. See the [custom fonts](advanced-features/custom-fonts.md) section for more information about using custom fonts." +msgstr "" + +#: src/settings.md:151 +msgid "Default font" +msgstr "" + +#: src/settings.md:152 +msgid "Choose the default font used by the AnkiDroid reviewer. You can add fonts to this list by copying them to the **fonts** folder." +msgstr "" + +#: src/settings.md:154 +msgid "Default font applicability" +msgstr "" + +#: src/settings.md:155 +msgid "The default setting is to only use the default font when no font has been specified in the card styling via Anki Desktop, however you can also force the default font to be applied, ignoring any font specification in the card styling." +msgstr "" + +#: src/settings.md:157 +msgid "Browser and editor font" +msgstr "" + +#: src/settings.md:158 +msgid "The font to be used by the browser and editor" +msgstr "" + +#: src/settings.md:160 +msgid "Card browser font scaling" +msgstr "" + +#: src/settings.md:161 +msgid "Lets you change the font size used in the card browser." +msgstr "" + +#: src/gestures.md:3 +msgid "[Actions](#actions)" +msgstr "" + +#: src/gestures.md:4 +msgid "[No action](#no-action)" +msgstr "" + +#: src/gestures.md:5 +msgid "[Answer button 1](#answer-button-1)" +msgstr "" + +#: src/gestures.md:6 +msgid "[Answer button 2](#answer-button-2)" +msgstr "" + +#: src/gestures.md:7 +msgid "[Answer button 3](#answer-button-3)" +msgstr "" + +#: src/gestures.md:8 +msgid "[Answer button 4](#answer-button-4)" +msgstr "" + +#: src/gestures.md:9 +msgid "[Answer recommended (green)](#answer-recommended-green)" +msgstr "" + +#: src/gestures.md:10 +msgid "[Answer better than recommended](#answer-better-than-recommended)" +msgstr "" + +#: src/gestures.md:12 +msgid "[Edit card](#edit-card)" +msgstr "" + +#: src/gestures.md:13 +msgid "[Mark](#mark)" +msgstr "" + +#: src/gestures.md:14 +msgid "[Lookup expression](#lookup-expression)" +msgstr "" + +#: src/gestures.md:15 +msgid "[Bury card](#bury-card)" +msgstr "" + +#: src/gestures.md:16 +msgid "[Suspend card](#suspend-card)" +msgstr "" + +#: src/gestures.md:17 +msgid "[Delete note](#delete-note)" +msgstr "" + +#: src/gestures.md:18 +msgid "[Play media](#play-media)" +msgstr "" + +#: src/gestures.md:19 +msgid "[Abort learning](#abort-learning)" +msgstr "" + +#: src/gestures.md:20 +msgid "[Bury note](#bury-note)" +msgstr "" + +#: src/gestures.md:21 +msgid "[Suspend note](#suspend-note)" +msgstr "" + +#: src/gestures.md:22 +msgid "[Toggle Red Flag](#toggle-red-flag)" +msgstr "" + +#: src/gestures.md:23 +msgid "[Toggle Orange Flag](#toggle-orange-flag)" +msgstr "" + +#: src/gestures.md:24 +msgid "[Toggle Green Flag](#toggle-green-flag)" +msgstr "" + +#: src/gestures.md:25 +msgid "[Toggle Blue Flag](#toggle-blue-flag)" +msgstr "" + +#: src/gestures.md:26 +msgid "[Remove Flag](#remove-flag)" +msgstr "" + +#: src/gestures.md:27 +msgid "[Advanced](#advanced)" +msgstr "" + +#: src/gestures.md:28 +msgid "[Collection path](#collection-path)" +msgstr "" + +#: src/gestures.md:29 +msgid "[Force full sync](#force-full-sync)" +msgstr "" + +#: src/gestures.md:30 +msgid "[Advanced Statistics](#advanced-statistics)" +msgstr "" + +#: src/gestures.md:31 +msgid "[Workarounds](#workarounds)" +msgstr "" + +#: src/gestures.md:32 +msgid "[Type answer into the card](#type-answer-into-the-card)" +msgstr "" + +#: src/gestures.md:33 +msgid "[Input Workaround](#input-workaround)" +msgstr "" + +#: src/gestures.md:34 +msgid "[Longclick Workaround](#longclick-workaround)" +msgstr "" + +#: src/gestures.md:35 +msgid "[Fix for Hebrew Vowels](#fix-for-hebrew-vowels)" +msgstr "" + +#: src/gestures.md:36 +msgid "[Text to Speech](#text-to-speech)" +msgstr "" + +#: src/gestures.md:37 +msgid "[Lookup Dictionary](#lookup-dictionary)" +msgstr "" + +#: src/gestures.md:38 +msgid "[Reset Languages](#reset-languages)" +msgstr "" + +#: src/gestures.md:39 +msgid "[eReader (up/down buttons)](#ereader-updown-buttons)" +msgstr "" + +#: src/gestures.md:40 +msgid "[eReader Double Scrolling](#ereader-double-scrolling)" +msgstr "" + +#: src/gestures.md:42 +msgid "AnkiDroid allows you to customize the interface, so that actions you perform frequently can be accomplished quickly by using tap and swipe gestures." +msgstr "" + +#: src/gestures.md:45 +msgid "Actions" +msgstr "" + +#: src/gestures.md:46 +msgid "The following gestures can be used:" +msgstr "" + +#: src/gestures.md:48 +msgid "Swipe up" +msgstr "" + +#: src/gestures.md:49 +msgid "Swipe down" +msgstr "" + +#: src/gestures.md:50 +msgid "Swipe left" +msgstr "" + +#: src/gestures.md:51 +msgid "Swipe right" +msgstr "" + +#: src/gestures.md:52 +msgid "Double touch" +msgstr "" + +#: src/gestures.md:53 +msgid "Touch top" +msgstr "" + +#: src/gestures.md:54 +msgid "Touch bottom" +msgstr "" + +#: src/gestures.md:55 +msgid "Touch left" +msgstr "" + +#: src/gestures.md:56 +msgid "Tough right" +msgstr "" + +#: src/gestures.md:58 +msgid "The following actions are available for each gesture:" +msgstr "" + +#: src/gestures.md:60 +msgid "No action" +msgstr "" + +#: src/gestures.md:61 +msgid "Don't do anything. Useful if you want to disable certain swipes, tap zones and so on." +msgstr "" + +#: src/gestures.md:63 +msgid "Answer button 1" +msgstr "" + +#: src/gestures.md:64 +msgid "When the answer screen is shown, choose the red button, indicating you wish to review the card again soon. This is useful when you forgot a card or wish to review it more frequently. When the question is shown, this action (and all other answer actions below) will simply show the answer." +msgstr "" + +#: src/gestures.md:69 +msgid "Answer button 2" +msgstr "" + +#: src/gestures.md:70 +msgid "When the answer screen is shown, choose the second button from the left, generally indicating you found the card hard to remember." +msgstr "" + +#: src/gestures.md:73 +msgid "Answer button 3" +msgstr "" + +#: src/gestures.md:74 +msgid "When the answer screen is shown, choose the third button from the left." +msgstr "" + +#: src/gestures.md:76 +msgid "Answer button 4" +msgstr "" + +#: src/gestures.md:77 +msgid "When the answer screen is shown, choose the fourth button from the left (when applicable)." +msgstr "" + +#: src/gestures.md:79 +msgid "Answer recommended (green)" +msgstr "" + +#: src/gestures.md:80 +msgid "When the answer screen is shown, choose the green button. This is the button you should end up using the most." +msgstr "" + +#: src/gestures.md:83 +msgid "Answer better than recommended" +msgstr "" + +#: src/gestures.md:84 +msgid "When the answer screen is shown, choose the button on the right, indicating you found the card too easy to remember and would like a much longer delay." +msgstr "" + +#: src/gestures.md:89 +msgid "Undoes the last action." +msgstr "" + +#: src/gestures.md:91 +msgid "Edit card" +msgstr "" + +#: src/gestures.md:92 +msgid "Edits the current card." +msgstr "" + +#: src/gestures.md:94 +msgid "Mark" +msgstr "" + +#: src/gestures.md:95 +msgid "Adds a tag called **Marked** the current note, so it can be easily found in a search." +msgstr "" + +#: src/gestures.md:97 +msgid "Lookup expression" +msgstr "" + +#: src/gestures.md:98 +msgid "When the lookup feature is enabled (in advanced settings), lookup an expression in the selected dictionary. Note: the expression needs to be copied to the clipboard before this action will work." +msgstr "" + +#: src/gestures.md:101 +msgid "Bury card" +msgstr "" + +#: src/gestures.md:102 +msgid "Hides the current card from review." +msgstr "" + +#: src/gestures.md:104 +msgid "Suspend card" +msgstr "" + +#: src/gestures.md:105 +msgid "Prevent current card from being shown during review until you unsuspend it via the card browser." +msgstr "" + +#: src/gestures.md:108 +msgid "Deletes the currently shown note and all of its cards." +msgstr "" + +#: src/gestures.md:110 +msgid "Play media" +msgstr "" + +#: src/gestures.md:111 +msgid "Replay any audio on the card." +msgstr "" + +#: src/gestures.md:113 +msgid "Abort learning" +msgstr "" + +#: src/gestures.md:114 +msgid "Stop reviewing and go back to the deck overview page." +msgstr "" + +#: src/gestures.md:116 +msgid "Bury note" +msgstr "" + +#: src/gestures.md:117 +msgid "Bury the current note (i.e. hide it until the next day)." +msgstr "" + +#: src/gestures.md:119 +msgid "Suspend note" +msgstr "" + +#: src/gestures.md:120 +msgid "Suspend the current note (i.e. hide it until you unsuspend it)." +msgstr "" + +#: src/gestures.md:122 +msgid "Toggle Red Flag" +msgstr "" + +#: src/gestures.md:123 +msgid "Enables the red flag, unless the flag is already red, in which case the flag is disabled." +msgstr "" + +#: src/gestures.md:125 +msgid "Toggle Orange Flag" +msgstr "" + +#: src/gestures.md:126 +msgid "Enables the orange flag, unless the flag is already orange, in which case the flag is disabled." +msgstr "" + +#: src/gestures.md:128 +msgid "Toggle Green Flag" +msgstr "" + +#: src/gestures.md:129 +msgid "Enables the green flag, unless the flag is already green, in which case the flag is disabled." +msgstr "" + +#: src/gestures.md:131 +msgid "Toggle Blue Flag" +msgstr "" + +#: src/gestures.md:132 +msgid "Enables the blue flag, unless the flag is already blue, in which case the flag is disabled." +msgstr "" + +#: src/gestures.md:134 +msgid "Remove Flag" +msgstr "" + +#: src/gestures.md:135 +msgid "Removes the flag from the card." +msgstr "" + +#: src/gestures.md:137 +msgid "Advanced" +msgstr "" + +#: src/gestures.md:138 +msgid "Some less common features for advanced users are shown here" +msgstr "" + +#: src/gestures.md:140 +msgid "Collection path" +msgstr "" + +#: src/gestures.md:141 +msgid "Change the location where AnkiDroid's data is stored (not recommended)" +msgstr "" + +#: src/gestures.md:143 +msgid "Force full sync" +msgstr "" + +#: src/gestures.md:144 +msgid "Tap this item to force a full upload or download on the next sync (for example, because you accidentally deleted a deck on one side and want to restore the deck rather than having its deletion synchronized)." +msgstr "" + +#: src/gestures.md:147 +msgid "Take into account the effect of future reviews in the **Forecast** graph. More info [here](advanced-features/advanced-statistics.md)." +msgstr "" + +#: src/gestures.md:149 +msgid "Workarounds" +msgstr "" + +#: src/gestures.md:151 +msgid "Type answer into the card" +msgstr "" + +#: src/gestures.md:153 +msgid "If you have set up your cards to ask you to type in the answer (as explained in [this section of the desktop manual](https://docs.ankiweb.net/templates/intro.html)), AnkiDroid will display a keyboard on such cards and allow you to check your answer." +msgstr "" + +#: src/gestures.md:155 +msgid "In order to improve user experience when working with the whiteboard and gestures, we use a typing box separate from the card, which is inconsistent with the way the feature works on Anki Desktop." +msgstr "" + +#: src/gestures.md:157 +msgid "For full consistency with Anki Desktop, you can enable this option which allows you to save screen area, and choose an appropriate font (e.g. Japanese vs Chinese) for the input box." +msgstr "" + +#: src/gestures.md:159 +msgid "Input Workaround" +msgstr "" + +#: src/gestures.md:160 +msgid "Some older devices couldn't gain focus into the text input box for typed-answer fields, so this was added (Hidden for API > 14)." +msgstr "" + +#: src/gestures.md:162 +msgid "Longclick Workaround" +msgstr "" + +#: src/gestures.md:163 +msgid "Some older devices couldn't detect longclick for initiating selecting/copying of text, so this was added (Hidden for API > 10)." +msgstr "" + +#: src/gestures.md:165 +msgid "Fix for Hebrew Vowels" +msgstr "" + +#: src/gestures.md:166 +msgid "Some older devices couldn't render Hebrew text, so this feature was added which allows the user to download and install a Hebrew font which is known to work (Hidden for API > 15)." +msgstr "" + +#: src/gestures.md:168 +msgid "Text to Speech" +msgstr "" + +#: src/gestures.md:169 +msgid "Enable this option to have Android read out all the text on your flashcards using the default text to speech engine. Google's built-in TTS engine should work; 3rd party TTS engines may or may not. AnkiDroid will ask you to select the language for the front and back of your cards once for each deck on the first time you review a card in that deck. To change the language or disable TTS for a given deck after making your initial choice, you'll need to use the **reset languages** option described below and reconfigure for each deck." +msgstr "" + +#: src/gestures.md:173 +msgid "Alternatively, if you want only fragments of cards to be read aloud, or if you want to set the TTS language for multiple decks at once, you can insert `` tags into [card templates](advanced-features/customizing-card-layout.md). For example, with the following template for the back of the card" +msgstr "" + +#: src/gestures.md:178 +msgid "answer" +msgstr "" + +#: src/gestures.md:180 src/gestures.md:194 +msgid "\"android\"" +msgstr "" + +#: src/gestures.md:180 src/gestures.md:194 +msgid "\"en_GB\"" +msgstr "" + +#: src/gestures.md:185 +msgid "only the `EnglishTranslation` field will be read aloud in a British English voice; the `Example` field, lying outside the `` tag, won't be read aloud. Every `` tag needs to have the following two attributes:" +msgstr "" + +#: src/gestures.md:187 +msgid "**`service`**: should be set to **`android`**, otherwise the contents of the **``** tag won't be read aloud;" +msgstr "" + +#: src/gestures.md:188 +msgid "**`voice`**: used to select the TTS language; should be a [two- or three- letter language code](https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes), optionally followed by an underscore and a [two-letter country or region code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2). A frequently updated list of languages supported by the Google TTS engine can be found on its [Wikipedia page](https://en.wikipedia.org/wiki/Google_Text-to-Speech)." +msgstr "" + +#: src/gestures.md:190 +msgid "To make both AnkiDroid and the [AwesomeTTS](https://ankiatts.appspot.com) plugin to the desktop application use a TTS engine to read aloud certain card fragments, put the `` tag inside the `` tag recognised by AwesomeTTS, or vice versa. An example:" +msgstr "" + +#: src/gestures.md:193 +msgid "\"sapi5js\"" +msgstr "" + +#: src/gestures.md:193 +msgid "\"39\"" +msgstr "" + +#: src/gestures.md:193 src/gestures.md:193 +msgid "\"0\"" +msgstr "" + +#: src/gestures.md:193 +msgid "\"Microsoft David Desktop\"" +msgstr "" + +#: src/gestures.md:193 +msgid "\"100\"" +msgstr "" + +#: src/gestures.md:200 +msgid "AnkiDroid automatically ignores `` tags selecting an unknown TTS service. In contrast, AwesomeTTS may display a warning message on encountering the `` tag; to suppress it, uncheck the two _Show errors_ checkboxes on the _Playback_ tab of the _AwesomeTTS: Configuration_ dialog in the desktop application." +msgstr "" + +#: src/gestures.md:202 +msgid "_This feature may be removed in the future in favor of a separately downloadable plugin._" +msgstr "" + +#: src/gestures.md:204 +msgid "Lookup Dictionary" +msgstr "" + +#: src/gestures.md:205 +msgid "Dictionary to use to lookup words copied to the clipboard in the reviewer. After setting up a dictionary, do the following to perform the lookup:" +msgstr "" + +#: src/gestures.md:207 +msgid "Longclick on the text you want to copy in the reviewer" +msgstr "" + +#: src/gestures.md:208 +msgid "After selecting the word you want to copy, press the **copy** icon in the app bar at the top of the screen" +msgstr "" + +#: src/gestures.md:209 +msgid "Tap once anywhere on the flashcard" +msgstr "" + +#: src/gestures.md:210 +msgid "A magnifying glass icon should appear, which performs the lookup when clicked" +msgstr "" + +#: src/gestures.md:212 +msgid "Alternatively, the lookup action can be performed via a gesture." +msgstr "" + +#: src/gestures.md:214 src/gestures.md:222 +msgid "_This feature will likely be removed in the future in favor of a plugin_" +msgstr "" + +#: src/gestures.md:216 +msgid "Reset Languages" +msgstr "" + +#: src/gestures.md:217 +msgid "Useful for resetting the TTS language" +msgstr "" + +#: src/gestures.md:219 +msgid "eReader (up/down buttons)" +msgstr "" + +#: src/gestures.md:220 +msgid "Support for eReader hardware buttons (see [issue 1625](https://github.com/ankidroid/Anki-Android/issues/1625))" +msgstr "" + +#: src/gestures.md:224 +msgid "eReader Double Scrolling" +msgstr "" + +#: src/gestures.md:225 +msgid "Double the scrolling distance when using the eReader hardware buttons" +msgstr "" + +#: src/note-formatting-toolbar.md:3 +msgid "The note formatting toolbar contains basic text formatting buttons (Bold, Italic, Underline, Horizontal Line, Insert Title, Change Font Size, [Insert MathJax](advanced-features/mathjax.md) and Insert Cloze Deletion)." +msgstr "" + +#: src/note-formatting-toolbar.md:5 +msgid "It also allows the addition of user-defined toolbar buttons using HTML. HTML is a powerful language allowing nearly endless customization of your cards. [Our wiki](https://github.com/ankidroid/Anki-Android/wiki/Note-Editor-Toolbar-HTML-Samples) contains common code samples to get you started." +msgstr "" + +#: src/note-formatting-toolbar.md:7 +msgid "A user-defined toolbar button can be removed by long pressing the button and selecting **Delete**." +msgstr "" + +#: src/keyboard-shortcuts.md:3 +msgid "Home Screen" +msgstr "" + +#: src/keyboard-shortcuts.md:5 src/keyboard-shortcuts.md:13 +#: src/keyboard-shortcuts.md:32 src/keyboard-shortcuts.md:53 +#: src/keyboard-shortcuts.md:64 +msgid "Shortcut" +msgstr "" + +#: src/keyboard-shortcuts.md:5 src/keyboard-shortcuts.md:13 +#: src/keyboard-shortcuts.md:32 src/keyboard-shortcuts.md:53 +#: src/keyboard-shortcuts.md:64 +msgid "Purpose" +msgstr "" + +#: src/keyboard-shortcuts.md:7 src/keyboard-shortcuts.md:55 +msgid "A" +msgstr "" + +#: src/keyboard-shortcuts.md:7 +msgid "Add Note" +msgstr "" + +#: src/keyboard-shortcuts.md:8 src/keyboard-shortcuts.md:40 +msgid "B" +msgstr "" + +#: src/keyboard-shortcuts.md:9 +msgid "Y" +msgstr "" + +#: src/keyboard-shortcuts.md:9 +msgid "Sync" +msgstr "" + +#: src/keyboard-shortcuts.md:11 +msgid "Reviewer" +msgstr "" + +#: src/keyboard-shortcuts.md:15 src/keyboard-shortcuts.md:49 +msgid "1" +msgstr "" + +#: src/keyboard-shortcuts.md:15 src/keyboard-shortcuts.md:15 +#: src/keyboard-shortcuts.md:15 src/keyboard-shortcuts.md:20 +#: src/keyboard-shortcuts.md:27 +msgid "," +msgstr "" + +#: src/keyboard-shortcuts.md:15 +msgid "2" +msgstr "" + +#: src/keyboard-shortcuts.md:15 +msgid "3" +msgstr "" + +#: src/keyboard-shortcuts.md:15 +msgid "4" +msgstr "" + +#: src/keyboard-shortcuts.md:15 +msgid "Press the nth answer button" +msgstr "" + +#: src/keyboard-shortcuts.md:16 +msgid "Gamepad Y" +msgstr "" + +#: src/keyboard-shortcuts.md:16 +msgid "Flip Card/Press the first answer button" +msgstr "" + +#: src/keyboard-shortcuts.md:17 +msgid "Gamepad X" +msgstr "" + +#: src/keyboard-shortcuts.md:17 +msgid "Flip Card/Press the second answer button" +msgstr "" + +#: src/keyboard-shortcuts.md:18 +msgid "Gamepad B" +msgstr "" + +#: src/keyboard-shortcuts.md:18 +msgid "Flip Card/Press the third answer button" +msgstr "" + +#: src/keyboard-shortcuts.md:19 +msgid "Gamepad A" +msgstr "" + +#: src/keyboard-shortcuts.md:19 +msgid "Flip Card/Press the fourth answer button" +msgstr "" + +#: src/keyboard-shortcuts.md:20 +msgid "Space" +msgstr "" + +#: src/keyboard-shortcuts.md:20 src/keyboard-shortcuts.md:34 +msgid "Enter" +msgstr "" + +#: src/keyboard-shortcuts.md:20 +msgid "Flip Card/Answer Good" +msgstr "" + +#: src/keyboard-shortcuts.md:21 +msgid "e" +msgstr "" + +#: src/keyboard-shortcuts.md:21 src/keyboard-shortcuts.md:56 +msgid "Edit Note" +msgstr "" + +#: src/keyboard-shortcuts.md:22 +msgid "\\*" +msgstr "" + +#: src/keyboard-shortcuts.md:22 src/keyboard-shortcuts.md:58 +msgid "Mark Note" +msgstr "" + +#: src/keyboard-shortcuts.md:23 +msgid "\\-" +msgstr "" + +#: src/keyboard-shortcuts.md:23 +msgid "Bury Card" +msgstr "" + +#: src/keyboard-shortcuts.md:24 +msgid "=" +msgstr "" + +#: src/keyboard-shortcuts.md:24 +msgid "Bury Note" +msgstr "" + +#: src/keyboard-shortcuts.md:25 +msgid "@" +msgstr "" + +#: src/keyboard-shortcuts.md:25 +msgid "Suspend Card" +msgstr "" + +#: src/keyboard-shortcuts.md:26 +msgid "!" +msgstr "" + +#: src/keyboard-shortcuts.md:26 +msgid "Suspend Note" +msgstr "" + +#: src/keyboard-shortcuts.md:27 +msgid "r" +msgstr "" + +#: src/keyboard-shortcuts.md:27 +msgid "F5" +msgstr "" + +#: src/keyboard-shortcuts.md:27 +msgid "Replay Media" +msgstr "" + +#: src/keyboard-shortcuts.md:28 +msgid "z" +msgstr "" + +#: src/keyboard-shortcuts.md:30 +msgid "Note Editor" +msgstr "" + +#: src/keyboard-shortcuts.md:34 src/keyboard-shortcuts.md:39 +#: src/keyboard-shortcuts.md:40 src/keyboard-shortcuts.md:41 +#: src/keyboard-shortcuts.md:42 src/keyboard-shortcuts.md:43 +#: src/keyboard-shortcuts.md:44 src/keyboard-shortcuts.md:45 +#: src/keyboard-shortcuts.md:46 src/keyboard-shortcuts.md:47 +#: src/keyboard-shortcuts.md:48 src/keyboard-shortcuts.md:49 +#: src/keyboard-shortcuts.md:55 src/keyboard-shortcuts.md:56 +#: src/keyboard-shortcuts.md:57 src/keyboard-shortcuts.md:58 +#: src/keyboard-shortcuts.md:59 src/keyboard-shortcuts.md:66 +msgid "Ctrl" +msgstr "" + +#: src/keyboard-shortcuts.md:34 src/keyboard-shortcuts.md:39 +#: src/keyboard-shortcuts.md:40 src/keyboard-shortcuts.md:41 +#: src/keyboard-shortcuts.md:42 src/keyboard-shortcuts.md:43 +#: src/keyboard-shortcuts.md:44 src/keyboard-shortcuts.md:45 +#: src/keyboard-shortcuts.md:46 src/keyboard-shortcuts.md:47 +#: src/keyboard-shortcuts.md:47 src/keyboard-shortcuts.md:48 +#: src/keyboard-shortcuts.md:48 src/keyboard-shortcuts.md:48 +#: src/keyboard-shortcuts.md:49 src/keyboard-shortcuts.md:55 +#: src/keyboard-shortcuts.md:56 src/keyboard-shortcuts.md:57 +#: src/keyboard-shortcuts.md:58 src/keyboard-shortcuts.md:59 +#: src/keyboard-shortcuts.md:59 src/keyboard-shortcuts.md:66 +msgid "+" +msgstr "" + +#: src/keyboard-shortcuts.md:34 +msgid "Save Note" +msgstr "" + +#: src/keyboard-shortcuts.md:35 src/keyboard-shortcuts.md:57 +msgid "D" +msgstr "" + +#: src/keyboard-shortcuts.md:35 +msgid "Select Deck" +msgstr "" + +#: src/keyboard-shortcuts.md:36 +msgid "L" +msgstr "" + +#: src/keyboard-shortcuts.md:36 src/keyboard-shortcuts.md:62 +msgid "Card Template Editor" +msgstr "" + +#: src/keyboard-shortcuts.md:37 +msgid "N" +msgstr "" + +#: src/keyboard-shortcuts.md:37 +msgid "Select Note Type" +msgstr "" + +#: src/keyboard-shortcuts.md:38 +msgid "T" +msgstr "" + +#: src/keyboard-shortcuts.md:38 +msgid "Edit Tags" +msgstr "" + +#: src/keyboard-shortcuts.md:39 src/keyboard-shortcuts.md:66 +msgid "P" +msgstr "" + +#: src/keyboard-shortcuts.md:39 +msgid "Preview Note" +msgstr "" + +#: src/keyboard-shortcuts.md:40 +msgid "Bold" +msgstr "" + +#: src/keyboard-shortcuts.md:41 +msgid "I" +msgstr "" + +#: src/keyboard-shortcuts.md:41 +msgid "Italic" +msgstr "" + +#: src/keyboard-shortcuts.md:42 +msgid "U" +msgstr "" + +#: src/keyboard-shortcuts.md:42 +msgid "Underline" +msgstr "" + +#: src/keyboard-shortcuts.md:43 src/keyboard-shortcuts.md:59 +msgid "R" +msgstr "" + +#: src/keyboard-shortcuts.md:43 +msgid "Insert Horizontal Rule" +msgstr "" + +#: src/keyboard-shortcuts.md:44 +msgid "H" +msgstr "" + +#: src/keyboard-shortcuts.md:44 +msgid "Insert Title" +msgstr "" + +#: src/keyboard-shortcuts.md:45 +msgid "F" +msgstr "" + +#: src/keyboard-shortcuts.md:45 +msgid "Change Font Size" +msgstr "" + +#: src/keyboard-shortcuts.md:46 +msgid "M" +msgstr "" + +#: src/keyboard-shortcuts.md:46 +msgid "Insert MathJax Equation" +msgstr "" + +#: src/keyboard-shortcuts.md:47 src/keyboard-shortcuts.md:48 +msgid "Shift" +msgstr "" + +#: src/keyboard-shortcuts.md:47 src/keyboard-shortcuts.md:48 +msgid "C" +msgstr "" + +#: src/keyboard-shortcuts.md:47 +msgid "Insert New Cloze Deletion" +msgstr "" + +#: src/keyboard-shortcuts.md:48 src/keyboard-shortcuts.md:59 +msgid "Alt" +msgstr "" + +#: src/keyboard-shortcuts.md:48 +msgid "Insert Cloze Deletion using existing number" +msgstr "" + +#: src/keyboard-shortcuts.md:49 +msgid ".." +msgstr "" + +#: src/keyboard-shortcuts.md:49 +msgid "0" +msgstr "" + +#: src/keyboard-shortcuts.md:49 +msgid "Insert User-Defined HTML" +msgstr "" + +#: src/keyboard-shortcuts.md:55 +msgid "Select All" +msgstr "" + +#: src/keyboard-shortcuts.md:56 +msgid "E" +msgstr "" + +#: src/keyboard-shortcuts.md:57 +msgid "Change Deck" +msgstr "" + +#: src/keyboard-shortcuts.md:58 +msgid "K" +msgstr "" + +#: src/keyboard-shortcuts.md:66 +msgid "Preview Changed" +msgstr "" + +#: src/rtl.md:3 +msgid "Anki and AnkiDroid have full support for RTL languages such as Arabic, Hebrew, and Persian." +msgstr "" + +#: src/rtl.md:5 +msgid "Editing Fields as RTL" +msgstr "" + +#: src/rtl.md:6 +msgid "Fields can be marked as RTL (currently possible only from Anki Desktop) for RTL editing. When a field is marked as RTL, then the text is right-aligned in editing fields and punctuation is correctly displayed at the end (left) of sentences. Text that contains blocks of LTR characters will be properly displayed as well, with the beginning of the sentence appearing to the right of the LTR block and the end of the sentence being displayed to the left of the LTR block." +msgstr "" + +#: src/rtl.md:8 +msgid "Directionality is especially important for editing and creating RTL cloze deletions as the cloze format includes both neutral and LTR markup characters. Therefore it is recommended to use a separate note type for LTR cloze deletions and RTL cloze deletions." +msgstr "" + +#: src/rtl.md:10 +msgid "Displaying Fields as RTL during study" +msgstr "" + +#: src/rtl.md:11 +msgid "To display a field as RTL, with proper right-alignment and directionality (punctuation at left of sentences, proper flow around LTR blocks), the field should be wrapped in a div or span element with the RTL directionality specified:" +msgstr "" + +#: src/rtl.md:14 +msgid "\"rtl\"" +msgstr "" + +#: src/anki-desktop.md:3 +msgid "[Via Cloud Sync](#via-cloud-sync)" +msgstr "" + +#: src/anki-desktop.md:4 +msgid "[Sync existing decks into a new AnkiDroid install](#sync-existing-decks-into-a-new-ankidroid-install)" +msgstr "" + +#: src/anki-desktop.md:5 +msgid "[Sync from AnkiDroid to Computer](#sync-from-ankidroid-to-computer)" +msgstr "" + +#: src/anki-desktop.md:7 +msgid "Anki has a free cloud synchronization service called AnkiWeb that makes it easy to keep your card decks in sync between mobile devices and your computer. If you cannot use sync for some reason, it's also possible to use USB, though this method is more laborious." +msgstr "" + +#: src/anki-desktop.md:9 +msgid "Note that AnkiDroid is not affiliated with Anki Desktop or AnkiWeb. AnkiDroid is based on Anki Desktop but it is developed by an entirely separate community of volunteers." +msgstr "" + +#: src/anki-desktop.md:11 +msgid "![AnkiDesktop.png](img/AnkiDesktop.png)" +msgstr "" + +#: src/anki-desktop.md:13 +msgid "Via Cloud Sync" +msgstr "" + +#: src/anki-desktop.md:14 +msgid "Before you can use AnkiWeb, you'll first need to create an account by visiting [https://ankiweb.net](https://ankiweb.net) and clicking the **Sign Up** button. If you have used AnkiWeb in the past, you can skip this step. After signing up, see the corresponding instructions below, depending on whether you are trying to get your existing decks into AnkiDroid or out of AnkiDroid." +msgstr "" + +#: src/anki-desktop.md:16 +msgid "Sync existing decks into a new AnkiDroid install" +msgstr "" + +#: src/anki-desktop.md:17 +msgid "In this scenario you have some existing Anki decks that you want to copy into a new install of AnkiDroid by syncing with AnkiWeb. Open the Anki client with your existing decks (usually this would be Anki desktop, but it could also mean a version of AnkiDroid you have been using on another device), and click the synchronization button (which has two arrows in a circle) at the top right of the deck list." +msgstr "" + +#: src/anki-desktop.md:19 +msgid "If you have never used AnkiWeb before you will need to enter your credentials if prompted, and then press the **Upload to AnkiWeb** button to confirm overwriting the empty collection on AnkiWeb with your existing decks in Anki. Anki will upload all your cards, images and audio to AnkiWeb. If you have a lot of media, this may take some time." +msgstr "" + +#: src/anki-desktop.md:21 +msgid "Once the synchronization has completed, open AnkiDroid in the device that you are trying to copy the existing decks into, and tap the **Sync** button in the app bar at the top of the main [deck list](deck-picker.md). After entering your AnkiWeb credentials, AnkiDroid will download all your cards and media, and remember your login information for next time." +msgstr "" + +#: src/anki-desktop.md:24 +msgid "Note that if you have any existing material in AnkiDroid before attempting to sync, you may be shown a message asking you to choose to either download from AnkiWeb, or upload to AnkiWeb. If you are happy to lose the cards in AnkiDroid then simply choose **Download**. If you need to merge the existing cards with AnkiDroid then you should see the [resolving conflicts](ankiweb-conflicts.md#dealing-with-merge-conflicts-on-ankiweb) section before continuing." +msgstr "" + +#: src/anki-desktop.md:26 +msgid "After the first synchronization has completed, you can click the sync button again any time you wish to synchronize your changes to the cloud. Only changes made since the previous sync will be sent, so subsequent syncs are a lot faster." +msgstr "" + +#: src/anki-desktop.md:28 +msgid "If you add some new cards on the desktop computer and want to sync them to AnkiDroid, you'd repeat the same basic process: sync on desktop (or close the program, as it syncs automatically on close by default), and then tap the sync button on AnkiDroid." +msgstr "" + +#: src/anki-desktop.md:30 +msgid "Sync from AnkiDroid to Computer" +msgstr "" + +#: src/anki-desktop.md:31 +msgid "The process of syncing from AnkiDroid to computer is essentially the same as syncing from computer to AnkiDroid, but in reverse." +msgstr "" + +#: src/anki-desktop.md:33 +msgid "From the [deck list](deck-picker.md), tap the sync button in the top right (it has two arrows in a circle). If it's your first time using AnkiWeb, you may need to enter your login credentials, and then press the \"upload\" button to upload your AnkiDroid collection to AnkiWeb." +msgstr "" + +#: src/anki-desktop.md:35 +msgid "Once the synchronization has completed, open Anki Desktop on your computer and press the sync button there (with two arrows in a circle), and Anki will download your collection." +msgstr "" + +#: src/ankiweb-conflicts.md:2 +msgid "Although it should not happen often, occasionally you may end up in the position where your cards on AnkiDroid can not be automatically merged with the cards on AnkiWeb. In this case it's necessary to choose to either upload to or download from AnkiWeb, which would overwrite any changes on the other side. " +msgstr "" + +#: src/ankiweb-conflicts.md:4 +msgid "If you have new cards on both sides which you want to keep, before syncing you can [export a deck package](exporting.md) for each deck containing new cards from AnkiDroid, then when you do the sync choose **download** to download from AnkiWeb. After the synchronization has completed, you can import the decks you previously exported from AnkiDroid, as per the [importing section](importing/importing-anki-files.md)." +msgstr "" + +#: src/ankiweb-conflicts.md:6 +msgid "Via USB" +msgstr "" + +#: src/ankiweb-conflicts.md:8 +msgid "If you don't have regular internet access, it's still possible to copy decks back and forth to your device, by using USB." +msgstr "" + +#: src/ankiweb-conflicts.md:10 +msgid "The USB method works by importing or exporting all your decks at once. This means that unlike syncing via AnkiWeb, you can't make changes from two locations at once and then merge them. Instead, if you wish to add cards on the desktop, you need to make sure you export the latest version of your collection from your mobile device first, or you'll end up losing any reviews done on the mobile device." +msgstr "" + +#: src/ankiweb-conflicts.md:12 +msgid "Thus the workflow you would typically use is to export your collection from your mobile device and import it into the desktop, make modifications on the desktop, and then export your collection and import it back into your mobile device." +msgstr "" + +#: src/ankiweb-conflicts.md:14 +msgid "AnkiDroid can't directly import text files. If you wish to do that, you'll need to do that with the desktop program, and then import your collection into AnkiDroid." +msgstr "" + +#: src/ankiweb-conflicts.md:16 +msgid "Copy all decks from Anki Desktop to AnkiDroid via USB" +msgstr "" + +#: src/ankiweb-conflicts.md:18 +msgid "On your computer:" +msgstr "" + +#: src/ankiweb-conflicts.md:19 +msgid "Open the desktop program." +msgstr "" + +#: src/ankiweb-conflicts.md:20 +msgid "Choose File>Export from the menu." +msgstr "" + +#: src/ankiweb-conflicts.md:21 +msgid "Click the **Export...** button. Make sure to leave **all decks** selected, as it's not possible to import individual decks into AnkiDroid. **Include scheduling information** must also remain checked." +msgstr "" + +#: src/ankiweb-conflicts.md:22 +msgid "Anki will automatically create a collection.apkg on your desktop. If the file is named something else, please see the previous step again." +msgstr "" + +#: src/ankiweb-conflicts.md:23 +msgid "Connect your Android device to your computer via the USB cable." +msgstr "" + +#: src/ankiweb-conflicts.md:24 +msgid "Open the file explorer on your computer and view the contents of your Android device." +msgstr "" + +#: src/ankiweb-conflicts.md:25 +msgid "Locate the AnkiDroid folder." +msgstr "" + +#: src/ankiweb-conflicts.md:26 +msgid "Drag the collection.apkg file from your desktop into this AnkiDroid folder." +msgstr "" + +#: src/ankiweb-conflicts.md:28 +msgid "Then in AnkiDroid:" +msgstr "" + +#: src/ankiweb-conflicts.md:29 +msgid "From the main decks screen, tap **Import file** from the menu" +msgstr "" + +#: src/ankiweb-conflicts.md:30 +msgid "Tap on **Collection** and then confirm" +msgstr "" + +#: src/ankiweb-conflicts.md:32 +msgid "Once complete, the decks on your device will have been replaced with the decks from your desktop. See the section on [importing apkg files](importing/importing-anki-files.md) for more help with importing." +msgstr "" + +#: src/ankiweb-conflicts.md:35 +msgid "Copy all decks from AnkiDroid to Anki Desktop via USB" +msgstr "" + +#: src/ankiweb-conflicts.md:37 +msgid "The process to copy your decks from AnkiDroid to Anki Desktop is essentially the same as above, but in reverse." +msgstr "" + +#: src/ankiweb-conflicts.md:38 +msgid "Start with your device disconnected from USB" +msgstr "" + +#: src/ankiweb-conflicts.md:39 +msgid "Choose **Export collection** from the main menu in the Deck Screen" +msgstr "" + +#: src/ankiweb-conflicts.md:40 +msgid "Ensure **Include scheduling information** remains checked and press **OK**" +msgstr "" + +#: src/ankiweb-conflicts.md:41 +msgid "Connect device to computer using USB" +msgstr "" + +#: src/ankiweb-conflicts.md:42 +msgid "Copy the **collection.apkg** from the path specified in the message to the desktop on your computer" +msgstr "" + +#: src/ankiweb-conflicts.md:43 +msgid "Double click on the file to import into Anki Desktop" +msgstr "" + +#: src/ankiweb-conflicts.md:45 +msgid "See the [exporting section](exporting.md) below for more detailed information on exporting from AnkiDroid." +msgstr "" + +#: src/advanced-features/intro.md:3 +msgid "[MathJax Support](mathjax.md)" +msgstr "" + +#: src/advanced-features/intro.md:4 +msgid "[Reverse Cards](reverse-cards.md)" +msgstr "" + +#: src/advanced-features/intro.md:5 +msgid "[Custom Fonts](custom-fonts.md)" +msgstr "" + +#: src/advanced-features/intro.md:6 +msgid "[Custom Card Layout](customizing-card-layout.md)" +msgstr "" + +#: src/advanced-features/intro.md:7 +msgid "[Type in the answer feature](type-in-answer.md)" +msgstr "" + +#: src/advanced-features/intro.md:8 +msgid "[Advanced Statistics](advanced-statistics.md)" +msgstr "" + +#: src/advanced-features/intro.md:9 +msgid "[Reminders](reminders.md)" +msgstr "" + +#: src/advanced-features/intro.md:10 +msgid "[Automatic Language Selection](set-language-hint.md)" +msgstr "" + +#: src/advanced-features/mathjax.md:2 +msgid "Mathjax is a modern typesetting library for math and chemistry. AnkiDroid supports Mathjax cards out of the box. Mathjax is configured to expect TeX formatting, with `\\(` and `\\)` delimiting inline equations and `\\[` and `\\]` for display equations." +msgstr "" + +#: src/advanced-features/mathjax.md:4 +msgid "To try it out, enter the following into a field:" +msgstr "" + +#: src/advanced-features/mathjax.md:10 +msgid "and preview the card." +msgstr "" + +#: src/advanced-features/mathjax.md:12 +msgid "For more details, see [Mathjax Support](https://docs.ankiweb.net/math.html#mathjax) in the Anki Manual." +msgstr "" + +#: src/advanced-features/mathjax.md:14 +msgid "[Previous workarounds](https://www.reddit.com/r/Anki/comments/ar7lxd/how_to_load_mathjax_color_extension_on_anki/egm6u5j) are no longer necessary as of AnkiDroid 2.9." +msgstr "" + +#: src/advanced-features/reverse-cards.md:3 +msgid "The Anki system has [built-in note types which allow you to review cards in both directions](https://docs.ankiweb.net/getting-started.html#note-types). When [creating new material](../adding-notes.md) in AnkiDroid, you should choose one of these note types, such as **Basic (and reversed card)**, which will automatically generate a reverse card for you." +msgstr "" + +#: src/advanced-features/reverse-cards.md:6 +msgid "![ReverseNoteType](../img/ReverseNoteType.png)" +msgstr "" + +#: src/advanced-features/reverse-cards.md:8 +msgid "If you used the wrong note type when adding your material, you can change the note type via the [edit note screen](../editing-notes.md), or you can change the note type for multiple cards at once using the browser in Anki Desktop. To do this, follow the instructions in the [syncing with Anki Desktop section](../anki-desktop.md), then in Anki Desktop open the browser, select the cards you want to change, then choose **Change note type** from the menu." +msgstr "" + +#: src/advanced-features/reverse-cards.md:11 +msgid "Alternatively, if your cards are using a custom card layout which doesn't include a reverse card, you can edit the note type to include a reverse card by following the instructions in the [reverse cards section](https://docs.ankiweb.net/templates/generation.html#reverse-cards) of the Anki Desktop user manual. While less convenient than using Anki Desktop, it is possible to edit the note type from directly within AnkiDroid as well; see the [custom card layout section](../advanced-features/customizing-card-layout.md) for more on this." +msgstr "" + +#: src/advanced-features/custom-fonts.md:3 +msgid "AnkiDroid allows you to use non-system fonts on your cards. To set them up properly, it is strongly recommended to use the official method that is used by Anki Desktop. Please see [the corresponding section in the desktop manual](https://docs.ankiweb.net/templates/styling.html#installing-fonts) for more information." +msgstr "" + +#: src/advanced-features/custom-fonts.md:5 +msgid "Alternatively, you can create a new subfolder **fonts** in the main AnkiDroid directory (i.e. the folder which contains the **backups** subfolder, specified under `Settings > Advanced > AnkiDroid directory)`, copy a compatible font file (i.e. .ttf) there, and then set this as the default font under `Settings > Fonts > Default font`. " +msgstr "" + +#: src/advanced-features/custom-fonts.md:7 +msgid "**Note:** this method will change the default font for **all** of your cards, whereas the official method can be more specific. Also, if you sync with AnkiWeb, using this method will lead to cards being displayed differently on different devices." +msgstr "" + +#: src/advanced-features/custom-fonts.md:9 +msgid "Only fonts in the ttf format are officially supported in Anki/AnkiDroid; the [Google Noto](https://fonts.google.com/noto) font set is highly recommended for all languages, and some other free fonts can be found [here](https://github.com/ankidroid/Anki-Android/wiki/Freely-distributable-fonts)." +msgstr "" + +#: src/advanced-features/custom-fonts.md:11 +msgid "Please note that AnkiDroid has to load the entire font into memory in order to use it, and fonts for Asian languages can be quite large. If you have an older device and notice AnkiDroid crashing frequently after installing a font, you may have exceeded your device's memory limits. For Google Noto, it's not recommended to use the combined CJK font, rather get the individual languages [separately from here](https://github.com/googlei18n/noto-cjk)." +msgstr "" + +#: src/advanced-features/custom-fonts.md:13 +msgid "**Note 1**: If you have **Fetch media on sync** disabled, you may need to manually copy the font file from Anki Desktop to your AnkiDroid/collection.media folder." +msgstr "" + +#: src/advanced-features/custom-fonts.md:15 +msgid "**Note 2**: If you can't get your font to work after following the steps in here and the Anki Desktop manual, please refer to the FAQ for " +msgstr "" + +#: src/advanced-features/custom-fonts.md:15 +msgid "detailed steps on how to debug font issues" +msgstr "" + +#: src/advanced-features/customizing-card-layout.md:2 +msgid "The layout of flashcards is completely customizable, although this is an advanced topic with a fairly steep learning curve, and you will probably find it a lot more convenient to do the customization with [Anki Desktop](../anki-desktop.md). " +msgstr "" + +#: src/advanced-features/customizing-card-layout.md:4 +msgid "The [card templates section](https://docs.ankiweb.net/templates/intro.html) of the Anki Desktop manual has detailed instructions on how to edit note types, and most of the actions discussed there are also available from AnkiDroid by tapping **cards** at the bottom of the note editor, or choosing the **manage note types** option in the deck picker. Since detailed information on customizing card layouts is available in the Anki desktop manual, it will not be repeated here." +msgstr "" + +#: src/advanced-features/customizing-card-layout.md:6 +msgid "There is an [advanced formatting page](https://github.com/ankidroid/Anki-Android/wiki/Advanced-formatting) on the AnkiDroid wiki with various hints on how you can get the most out of your card formatting, and we encourage you to read it, and edit it freely if you have any tips that you'd like to share with the community." +msgstr "" + +#: src/advanced-features/type-in-answer.md:3 +msgid "AnkiDroid allows you to type in the correct answer and then compare it to the right answer. You have to set this up with Anki desktop, as described in the [Anki Desktop manual](https://docs.ankiweb.net/templates/fields.html#checking-your-answer)." +msgstr "" + +#: src/advanced-features/type-in-answer.md:5 +msgid "Anki desktop replaces the **{{type:NN}}** field on the front of a card with an input box in the card. On AnkiDroid it is replaced with a **......** prompt instead, and a text input box is shown at the bottom. The comparison between typed text and the correct text is shown on the answer side in place of the **{{type:NN}}** field there, like on Anki desktop." +msgstr "" + +#: src/advanced-features/type-in-answer.md:7 +msgid "The text input box and the soft keyboard can be hidden by ticking **Disable typing in answer** in the preferences." +msgstr "" + +#: src/advanced-features/type-in-answer.md:9 +msgid "Even with typing disabled, the correct answer is shown on the answer side. This is done on purpose; otherwise the correct answer might not be shown at all." +msgstr "" + +#: src/advanced-features/type-in-answer.md:11 +msgid "To hide the comparison (e.g. because the correct answer is shown anyway), the HTML id **typeans** can be used. Add following to the [card styling](https://docs.ankiweb.net/templates/styling.html#card-styling) using Anki Desktop." +msgstr "" + +#: src/advanced-features/type-in-answer.md:19 +msgid "The type answer prompt and the comparison have more classes that can be used to change the way they are displayed. Some of these are the same as on Anki Desktop, some are specific to AnkiDroid." +msgstr "" + +#: src/advanced-features/type-in-answer.md:21 +msgid "The comparison uses three classes, typeGood, typeBad and typeMissed to add green, red and gray background to the typing comparison. These three classes are used on Anki desktop as well." +msgstr "" + +#: src/advanced-features/type-in-answer.md:23 +msgid "The **......** prompt has the class **typePrompt**." +msgstr "" + +#: src/advanced-features/type-in-answer.md:25 +msgid "When typing is set to off in the preferences, the class **typeOff** is added to the prompt on the question side, and to the div element containing the comparison on the answer side. This class can be used to show the type prompt or to hide the typing comparison in this case." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:3 +msgid "If Advanced Statistics are enabled, it changes the **Forecast** graph so that it shows the estimated number of reviews that will be due on a given day in the future taking into account future reviews, learning new cards and failing cards. The bars and the left axis show the number of cards due on each day if you study all cards each day, while the line and the right axis show the number of unseen (shown as **learn**), young and mature cards your deck or collection will consist of if you study all cards each day. The forecast graph does count reviews that are currently overdue. It assumes that the overdue cards will be reviewed according to the **maximum reviews/day** deck option." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:5 +msgid "Advanced Statistics can be enabled in `Settings -> Advanced -> Advanced Statistics` (in plugin section)." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:7 +msgid "The outcome of future reviewing, learning or failing cards affects reviews after that future review. To take this into account, the probability of each outcome is computed from the review log. Then the outcome is randomly chosen, such that an outcome which is more likely according to the review log is more likely to be chosen than an outcome which is less likely according to the review log. The settings all affect how the effect of the outcome of future reviews on subsequent reviews is taken into account." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:9 +msgid "Compute first n days, simulate remainder" +msgstr "" + +#: src/advanced-features/advanced-statistics.md:10 +msgid "If this setting is set to a number greater than 0, instead of randomly choosing an outcome, each possible outcome is taken into account in the simulation, together with its probability. The probability is taken into account for the graph and for future reviews in which it results, which also affect the graph. One review has a couple of possible outcomes (say 4), which all result in a review. That review also has a couple of possible outcomes and so on. If many reviews are simulated this way, many reviews (4 x 4 x 4 x ... ) have to be taken into account which increases the time it takes to compose the graph. Therefore, for reviews later than n days from now are simulated by randomly choosing an outcome." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:14 +msgid "In summary, higher n gives a more accurate graph, but it takes more time to compose the graph." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:16 +msgid "Precision of computation" +msgstr "" + +#: src/advanced-features/advanced-statistics.md:18 +msgid "Reviews which occur with a probability smaller than 100% minus the configured precision of the computation are simulated by randomly choosing an outcome rather than taking into account each possible outcome. This setting is only applicable if the first n days are computed. If Advanced Statistics are disabled, the **Forecast** graph shows the estimated number of reviews that will be due on a given day in the future if you do not review cards, learn no new cards and fail no cards." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:21 +msgid "In summary, higher precision gives a more accurate graph, but it takes more time to compose the graph." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:23 +msgid "Number of iterations of the simulation" +msgstr "" + +#: src/advanced-features/advanced-statistics.md:24 +msgid "Composes the graph several times and then displays the average of these graphs. Each time the graph is composed, another outcome might be randomly chosen. If we average many outcomes which are randomly chosen taking into account the probabilities from the review log, the average outcome will likely be close to the average of the probabilities from the review log. If we average many graphs, the average graph will likely be close to the graph which is generated by taking into account all possible outcomes. If the number of graphs which are averaged is not too high, it will be faster than taking into account all possible outcomes." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:29 +msgid "In summary, a higher number of iterations gives a more accurate graph, but it takes more time to compose the graph." +msgstr "" + +#: src/advanced-features/reminders.md:2 +msgid "AnkiDroid can remind you to devote some time to reviewing cards every day at a specific time via Android's notification framework. You can configure reminders for each options group independently. To configure a notification go to Deck options > Reminders, then tick the checkbox and select the time you want to be notified at. To stop receiving notifications go to Deck options > Reminders and unmark the checkbox." +msgstr "" + +#: src/advanced-features/reminders.md:7 +msgid "Notifications only work for top level decks. Please let us know if you want us to add notifications for subdecks too." +msgstr "" + +#: src/advanced-features/set-language-hint.md:2 +msgid "AnkiDroid has an in Automatic Language Selection feature in the Note Editor starting with AnkiDroid 2.13. This feature allows you to define a default language to be used in your keyboard for a field in a note type." +msgstr "" + +#: src/advanced-features/set-language-hint.md:5 +msgid "For example, if you have Russian and English note fields, and your keyboard supports the setImeHintLocales Android API, the keyboard layout will switch to Russian in the first field and back to English in the second automatically when the fields get focus. [Checkout video reference for demonstration](https://www.youtube.com/watch?v=JrxDjTrRhBE)" +msgstr "" + +#: src/help.md:1 +msgid "Help & Support" +msgstr "" + +#: src/help.md:3 +msgid "Before Asking" +msgstr "" + +#: src/help.md:5 +msgid "Before asking for help, please try searching through the [AnkiDroid Manual](intro.md), the list of [Frequently Asked Questions](https://github.com/ankidroid/Anki-Android/wiki/FAQ), and also the main [Anki Manual](https://docs.ankiweb.net) for general help with the Anki system and features, and any issues not limited to Android." +msgstr "" + +#: src/help.md:7 +msgid "Support" +msgstr "" + +#: src/help.md:8 +msgid "If you were unable to find what you needed in the documentation above, please visit the relevant site below:" +msgstr "" + +#: src/help.md:10 +msgid "Non-Android-Specific Issues" +msgstr "" + +#: src/help.md:11 +msgid "AnkiDroid (the Android version of Anki) is created and managed independently from other Anki versions. For the PC / Web / iOS versions, and general Anki issues that are not limited to Android, please visit the main [Anki support site](https://forums.ankiweb.net)." +msgstr "" + +#: src/help.md:13 +msgid "AnkiDroid Questions" +msgstr "" + +#: src/help.md:14 +msgid "For questions and help concerning AnkiDroid, please visit the [user forum](https://groups.google.com/g/anki-android), or you can send your questions to the forum's [public email address](mailto:public-forum@ankidroid.org) if you don't want to register on the forum." +msgstr "" + +#: src/help.md:16 +msgid "Bug Reports and Feature Requests" +msgstr "" + +#: src/help.md:17 +msgid "For bug reports and feature requests, please search through the current list of open issues on the [AnkiDroid issue tracker](https://github.com/ankidroid/Anki-Android/issues), and if there are no existing issues, create a new issue including as much information as possible. For bug reports, please also include the output of **debug info** by following the steps below: " +msgstr "" + +#: src/help.md:20 +msgid "Open the navigation drawer by tapping the button on the top left of the screen" +msgstr "" + +#: src/help.md:21 +msgid "Tap **settings**" +msgstr "" + +#: src/help.md:22 +msgid "Tap **advanced**" +msgstr "" + +#: src/help.md:23 +msgid "Tap **about AnkiDroid** at the bottom" +msgstr "" + +#: src/help.md:24 +msgid "Tap the **copy debug info** button at the bottom (which copies **debug info** to the clipboard)" +msgstr "" + +#: src/help.md:25 +msgid "If filling out the bug report on your mobile device, paste the contents of the clipboard directly to the issue. Alternatively, you can paste the contents of the clipboard into a new email, send it to yourself, then copy and paste that into the bug report from your computer." +msgstr "" + +#: src/help.md:27 +msgid "![DebugInfo.png](img/DebugInfo.png)" +msgstr "" + +#: src/help.md:29 +msgid "**Note:** if you are unable to open the app at all, so cannot even access **settings** then please follow [these instructions](https://github.com/ankidroid/Anki-Android/wiki/Unopenable-collections)." +msgstr "" + +#: src/help.md:31 +msgid "This **debug info** is important as it allows us to match your report with our internal crash report data. " +msgstr "" + +#: src/help.md:34 +msgid "AnkiDroid is an open source project, and anyone is welcome to contribute (including non-developers)! For help with contributing to AnkiDroid, please first check the [contribution wiki page](https://github.com/ankidroid/Anki-Android/wiki/Contributing), and ask any further questions in the [main forum](https://groups.google.com/g/anki-android)." +msgstr "" + +#: src/beta-testing.md:2 +msgid "If you want to try out the latest features in AnkiDroid, you can sign up for the beta testing program as follows:" +msgstr "" + +#: src/beta-testing.md:4 +msgid "Visit the [Google Play Beta page](https://play.google.com/apps/testing/com.ichi2.anki)" +msgstr "" + +#: src/beta-testing.md:5 +msgid "Click **Become a beta tester**" +msgstr "" + +#: src/beta-testing.md:7 +msgid "After following these steps, the latest beta version will automatically be installed by Google Play in the same way as ordinary updates." +msgstr "" + +#: src/beta-testing.md:9 +msgid "If you are more adventurous, you can also become an alpha tester, by joining the [alpha testers group](https://groups.google.com/g/ankidroidalphatesters) in addition to performing the above steps for beta testing." +msgstr "" + +#: src/beta-testing.md:11 +msgid "Please submit any bugs you find in these development versions to the AnkiDroid issue tracker, as per the [main help page](help.md)." +msgstr "" + +#: src/beta-testing.md:13 +msgid "If you wish to leave the testing program at any time, simply visit the [Google Play Beta page](https://play.google.com/apps/testing/com.ichi2.anki) and click **Leave the test**." +msgstr "" + +#: src/contributing.md:3 +msgid "[Get involved](#get-involved)" +msgstr "" + +#: src/contributing.md:4 +msgid "[Translate](#translate)" +msgstr "" + +#: src/contributing.md:5 +msgid "[Develop](#develop)" +msgstr "" + +#: src/contributing.md:7 +msgid "AnkiDroid is an open source project, and its development relies on contributions from volunteers. Here are some of the ways you can contribute to the AnkiDroid project:" +msgstr "" + +#: src/contributing.md:9 +msgid "Get involved" +msgstr "" + +#: src/contributing.md:10 +msgid "Rate the app, join the [AnkiDroid forum](https://groups.google.com/g/anki-android) and answer questions for other users, submit bug reports, become a [beta tester](beta-testing.md), etc. More detailed information on ways you can contribute as a non-developer can be found on the [Wiki](https://github.com/ankidroid/Anki-Android/wiki/Contributing)." +msgstr "" + +#: src/contributing.md:12 +msgid "Translate" +msgstr "" + +#: src/contributing.md:13 +msgid "Translations of AnkiDroid and this user manual are all contributed by users, and are greatly appreciated. See the " +msgstr "" + +#: src/contributing.md:14 +msgid "translating" +msgstr "" + +#: src/contributing.md:14 +msgid " wiki page for detailed instructions on how to contribute translations." +msgstr "" + +#: src/contributing.md:16 +msgid "Develop" +msgstr "" + +#: src/contributing.md:17 +msgid "The source code for AnkiDroid is available on our main [Github page](https://github.com/ankidroid/Anki-Android), and bug fixes as well as new features are very welcome. Before investing a lot of time on working on a new feature, you may like to ask on the forum first if it's likely to be merged into the main project, as not all features will be accepted. If you are just getting started with Android programming, feel free to ask on the forum for some tips and/or tasks which are suitable for beginners." +msgstr "" + +#: src/changelog/v2.15.md:1 +msgid "Version 2.15.6 (20210714)" +msgstr "" + +#: src/changelog/v2.15.md:2 +msgid "One more crash fix, no crashes shall be left unfixed! If we can help it." +msgstr "" + +#: src/changelog/v2.15.md:4 +msgid "Version 2.15.5 (20210713)" +msgstr "" + +#: src/changelog/v2.15.md:5 +msgid "[🤜🤛 Thank you! Your support makes the fixes happen!](https://opencollective.com/ankidroid)" +msgstr "" + +#: src/changelog/v2.15.md:6 +msgid "Full-screen navigation drawer drag is a preference, default off" +msgstr "" + +#: src/changelog/v2.15.md:7 +msgid "Floating Action Button ('+') labels are clickable again" +msgstr "" + +#: src/changelog/v2.15.md:8 +msgid "Fixed crash on first run post-install on tablets" +msgstr "" + +#: src/changelog/v2.15.md:9 +msgid "Fixed odd weekly breakdown stats chart behavior" +msgstr "" + +#: src/changelog/v2.15.md:10 +msgid "Fixed crash creating new deck from deck chooser" +msgstr "" + +#: src/changelog/v2.15.md:11 +msgid "[Updated translations](https://crowdin.com/project/ankidroid) (thank you translators!)" +msgstr "" + +#: src/changelog/v2.15.md:12 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/47?closed=1)" +msgstr "" + +#: src/changelog/v2.15.md:13 +msgid "We are deep into development for v2.16 + Google Summer of Code, lots of new stuff coming" +msgstr "" + +#: src/changelog/v2.15.md:14 +msgid "Happy reviewing!" +msgstr "" + +#: src/changelog/v2.15.md:16 +msgid "Version 2.15.4 (20210602)" +msgstr "" + +#: src/changelog/v2.15.md:17 +msgid "Saw one crash show up for 2.15.3: if you touched the 3 numbers instead of the deck name on the deck list on phones, it would crash" +msgstr "" + +#: src/changelog/v2.15.md:19 +msgid "Temporarily revert full screen navigation drawer option to fix" +msgstr "" + +#: src/changelog/v2.15.md:21 +msgid "Version 2.15.3 (20210602)" +msgstr "" + +#: src/changelog/v2.15.md:22 +msgid "[❤️ Thank you so much for the donations! We appreciate it ❤️](https://opencollective.com/ankidroid)" +msgstr "" + +#: src/changelog/v2.15.md:23 +msgid "Another batch of fixes stabilizing all the work done for AnkiDroid 2.15" +msgstr "" + +#: src/changelog/v2.15.md:24 +msgid "Fix \"Search All Decks\" in Card Browser not searching" +msgstr "" + +#: src/changelog/v2.15.md:25 +msgid "Make new full screen navigation drawer open optional, default off" +msgstr "" + +#: src/changelog/v2.15.md:26 +msgid "Preserve edited search in card browser if navigation drawer opens" +msgstr "" + +#: src/changelog/v2.15.md:27 +msgid "Fix crash editing Tags dialog when switching back from another app" +msgstr "" + +#: src/changelog/v2.15.md:28 +msgid "Fix incorrect cloze help link" +msgstr "" + +#: src/changelog/v2.15.md:29 +msgid "Increase touchable area of undo icon" +msgstr "" + +#: src/changelog/v2.15.md:30 +msgid "Fix legacy / handebar template parsing" +msgstr "" + +#: src/changelog/v2.15.md:31 +msgid "Fix icon sizes for notifications and search" +msgstr "" + +#: src/changelog/v2.15.md:32 +msgid "Fix audio files incorrectly importing when attached" +msgstr "" + +#: src/changelog/v2.15.md:33 +msgid "Fix deck options \"steps\" showing up with lots of decimal places" +msgstr "" + +#: src/changelog/v2.15.md:34 +msgid "Update translations, add Kannada language" +msgstr "" + +#: src/changelog/v2.15.md:35 +msgid "Fix F-Droid app store publishing" +msgstr "" + +#: src/changelog/v2.15.md:36 +msgid "Correct navigation away from and back to Changelog" +msgstr "" + +#: src/changelog/v2.15.md:37 +msgid "Fix template parsing for \"{{FrontSide}}\"" +msgstr "" + +#: src/changelog/v2.15.md:38 +msgid "Fix stats tab view layout in RTL context" +msgstr "" + +#: src/changelog/v2.15.md:39 +msgid "Fix preview of cloze cards from note editor " +msgstr "" + +#: src/changelog/v2.15.md:40 +msgid "[Full changelog here](https://github.com/ankidroid/Anki-Android/milestone/45?closed=1)" +msgstr "" + +#: src/changelog/v2.15.md:43 +msgid "Version 2.15.2 (20210526)" +msgstr "" + +#: src/changelog/v2.15.md:44 +msgid "[❤️ Your donations here give us the time to work on the app, thank you! ❤️](https://opencollective.com/ankidroid)" +msgstr "" + +#: src/changelog/v2.15.md:45 src/changelog/v2.15.md:58 +msgid "🔥 Hot fixes for 2.15.0 issues (See below for 2.15.0 notes 👇 it was a huge release!)" +msgstr "" + +#: src/changelog/v2.15.md:46 +msgid "2.15 should have no regressions now we think 🤞 " +msgstr "" + +#: src/changelog/v2.15.md:47 +msgid "That means we'll slow down the releases and these popups now, sorry + thank you " +msgstr "" + +#: src/changelog/v2.15.md:48 +msgid "Fix another API issue breaking card add from external apps" +msgstr "" + +#: src/changelog/v2.15.md:49 +msgid "Fix conditional template issue that caused blank cards for some" +msgstr "" + +#: src/changelog/v2.15.md:50 +msgid "Fix auto-advance ignoring \"no advance\" setting if card had audio" +msgstr "" + +#: src/changelog/v2.15.md:51 +msgid "Gracefully handle corrupt collections with invalid current decks selected" +msgstr "" + +#: src/changelog/v2.15.md:52 +msgid "Publish to Amazon App Store again (go get AnkiDroid on your Fire devices!)" +msgstr "" + +#: src/changelog/v2.15.md:53 +msgid "[Issue tracker milestone here](https://github.com/ankidroid/Anki-Android/milestone/44?closed=1)" +msgstr "" + +#: src/changelog/v2.15.md:56 +msgid "Version 2.15.1 (20210525)" +msgstr "" + +#: src/changelog/v2.15.md:57 +msgid "[❤️ Your donations funded this rapid set of fixes, enjoy! ❤️](https://opencollective.com/ankidroid)" +msgstr "" + +#: src/changelog/v2.15.md:59 +msgid "Do not auto-update users to scheduler v2. Yet." +msgstr "" + +#: src/changelog/v2.15.md:60 +msgid "Fix crash on undo after deck delete" +msgstr "" + +#: src/changelog/v2.15.md:61 +msgid "Try harder to successfully paste images" +msgstr "" + +#: src/changelog/v2.15.md:62 +msgid "Reviewer performance fix - only load mathjax if needed" +msgstr "" + +#: src/changelog/v2.15.md:63 +msgid "Fixed compatibility issue for 2.15 collections on 2.14" +msgstr "" + +#: src/changelog/v2.15.md:64 +msgid "Fixed API issue breaking card add from external apps" +msgstr "" + +#: src/changelog/v2.15.md:65 +msgid "Fresh language translations. See a bad translation? [You can fix it easily!](https://crowdin.com/project/ankidroid)" +msgstr "" + +#: src/changelog/v2.15.md:66 +msgid "[Detailed issue log](https://github.com/ankidroid/Anki-Android/milestone/43?closed=1)" +msgstr "" + +#: src/changelog/v2.15.md:68 +msgid "Version 2.15.0 (20210524)" +msgstr "" + +#: src/changelog/v2.15.md:69 +msgid "[❤️ Your donations funded these features, enjoy! ❤️](https://opencollective.com/ankidroid)" +msgstr "" + +#: src/changelog/v2.15.md:70 +msgid "Thanks to [Google Summer of Code](https://github.com/ankidroid/Anki-Android/wiki/Google-Summer-of-Code-2021) students for a HUGE effort!" +msgstr "" + +#: src/changelog/v2.15.md:71 +msgid "Way too many changes to describe, but here are the highlights:" +msgstr "" + +#: src/changelog/v2.15.md:72 +msgid "New timezone code supported for sync with AnkiDesktop!" +msgstr "" + +#: src/changelog/v2.15.md:73 +msgid "Performance, stability improvements everywhere" +msgstr "" + +#: src/changelog/v2.15.md:74 +msgid "General UI improvements (accessibility, dark mode, design, more)" +msgstr "" + +#: src/changelog/v2.15.md:75 +msgid "Many new keyboard shortcuts and gesture actions" +msgstr "" + +#: src/changelog/v2.15.md:76 +msgid "Languages: Added Odia, Malayalam; big RTL support improvements!" +msgstr "" + +#: src/changelog/v2.15.md:77 +msgid "Reviewer: Javascript API: many new methods" +msgstr "" + +#: src/changelog/v2.15.md:78 +msgid "Improved account login, sync conflict, card template UI" +msgstr "" + +#: src/changelog/v2.15.md:79 +msgid "Tags and Decks dialogs have search!" +msgstr "" + +#: src/changelog/v2.15.md:80 +msgid "Whiteboard: erase, pen colors, stroke width" +msgstr "" + +#: src/changelog/v2.15.md:81 +msgid "NoteEditor: Mathjax 3, capitalize sentences setting" +msgstr "" + +#: src/changelog/v2.15.md:82 +msgid "Huge quality improvements all over codebase, helps future developers" +msgstr "" + +#: src/changelog/v2.15.md:83 +msgid "[🚧 Full 638 item changelog here! 🚧](https://github.com/ankidroid/Anki-Android/milestone/37?closed=1)" +msgstr "" + +#: src/changelog/v2.14.md:1 +msgid "Version 2.14.6 (20210309)" +msgstr "" + +#: src/changelog/v2.14.md:2 +msgid "Reviewer: fix \"my card is blank now with 2.14.5! help!\" 😱" +msgstr "" + +#: src/changelog/v2.14.md:3 +msgid "Reviewer: fix Android 8/8.1 review buttons disappear (finally?)" +msgstr "" + +#: src/changelog/v2.14.md:5 +msgid "Version 2.14.5 (20210307)" +msgstr "" + +#: src/changelog/v2.14.md:6 +msgid "We really appreciate the [donations](https://opencollective.com/ankidroid), they paid for these fixes 🤝" +msgstr "" + +#: src/changelog/v2.14.md:7 +msgid "NoteEditor: Android 11 users can crop!" +msgstr "" + +#: src/changelog/v2.14.md:8 +msgid "NoteEditor: Canceling crop twice won't delete your image" +msgstr "" + +#: src/changelog/v2.14.md:9 +msgid "DeckList: parent limits altered to match Desktop" +msgstr "" + +#: src/changelog/v2.14.md:10 +msgid "DeckList: current deck saved as correct type" +msgstr "" + +#: src/changelog/v2.14.md:11 +msgid "SchedulerV2: allow very small delays" +msgstr "" + +#: src/changelog/v2.14.md:12 +msgid "KNOWN ISSUE: [Android 8/8.1 answer buttons disappear](https://github.com/ankidroid/Anki-Android/issues/7369). Use gestures as workaround." +msgstr "" + +#: src/changelog/v2.14.md:13 +msgid "Anyone with Android 8/8.1 that reproduces this and knows how to develop Android layouts? We'd love the help!" +msgstr "" + +#: src/changelog/v2.14.md:15 +msgid "Version 2.14.4 (20210307)" +msgstr "" + +#: src/changelog/v2.14.md:16 +msgid "Re-released immediately as 2.14.5 after release script issue 🤷😅" +msgstr "" + +#: src/changelog/v2.14.md:18 +msgid "Version 2.14.3 (20210109)" +msgstr "" + +#: src/changelog/v2.14.md:19 +msgid "[The AnKing](https://www.youtube.com/c/TheAnKing) has graced us with a [new intro video](https://youtu.be/iuBU_OM9oAM)! 🤓" +msgstr "" + +#: src/changelog/v2.14.md:20 +msgid "Still happily overwhelmed by the [donations](https://opencollective.com/ankidroid) 💪" +msgstr "" + +#: src/changelog/v2.14.md:21 +msgid "Reviewer: Fix mark note keyboard shortcut" +msgstr "" + +#: src/changelog/v2.14.md:22 +msgid "NoteEditor: Fix to remove padding if removing formatting toolbar" +msgstr "" + +#: src/changelog/v2.14.md:23 +msgid "Previewer: Fix to show same card after edit" +msgstr "" + +#: src/changelog/v2.14.md:24 +msgid "Scheduler: Fix v1 scheduler completes deck when only learn cards due" +msgstr "" + +#: src/changelog/v2.14.md:26 +msgid "Version 2.14.2 (20201202)" +msgstr "" + +#: src/changelog/v2.14.md:27 +msgid "Wow! We are humbled by the [donations](https://opencollective.com/ankidroid) 🤯" +msgstr "" + +#: src/changelog/v2.14.md:28 +msgid "The resources are already going to contributors to improve the app! Thank you ❤️ " +msgstr "" + +#: src/changelog/v2.14.md:29 +msgid "Note Editor: Fix image crop not working first time" +msgstr "" + +#: src/changelog/v2.14.md:30 +msgid "Note Editor: Paste image at cursor not end" +msgstr "" + +#: src/changelog/v2.14.md:31 +msgid "Note Editor: Fix Ctrl+C opens preview" +msgstr "" + +#: src/changelog/v2.14.md:32 +msgid "Note Editor: Add menubar toggle to disable editing toolbar" +msgstr "" + +#: src/changelog/v2.14.md:33 +msgid "Home Screen: Fix Vivo device shortcut creation (again)" +msgstr "" + +#: src/changelog/v2.14.md:34 +msgid "Reviewer: Fix numeric keypad not working" +msgstr "" + +#: src/changelog/v2.14.md:35 +msgid "Note Editor: Fix cloze cards going to wrong deck" +msgstr "" + +#: src/changelog/v2.14.md:36 +msgid "Navigation Menu: Fix safe display app hang" +msgstr "" + +#: src/changelog/v2.14.md:37 +msgid "Preferences: Fix gestures menu translation / ordering issue" +msgstr "" + +#: src/changelog/v2.14.md:38 +msgid "Translations: thanks [translators!](https://crowdin.com/project/ankidroid/activity_stream) - you can help too!" +msgstr "" + +#: src/changelog/v2.14.md:39 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/39?closed=1)" +msgstr "" + +#: src/changelog/v2.14.md:41 +msgid "Version 2.14.1 (2020-11-23)" +msgstr "" + +#: src/changelog/v2.14.md:42 +msgid "Always free, always open source, but you may [donate if you like 😊](https://opencollective.com/ankidroid)" +msgstr "" + +#: src/changelog/v2.14.md:43 +msgid "Move sync button to right of action bar (vs search)" +msgstr "" + +#: src/changelog/v2.14.md:44 +msgid "Fix duplicate note detection" +msgstr "" + +#: src/changelog/v2.14.md:45 +msgid "Fix add deck shortcut on Vivo devices" +msgstr "" + +#: src/changelog/v2.14.md:46 +msgid "Fix non-translatable 'Card Info' strings" +msgstr "" + +#: src/changelog/v2.14.md:47 +msgid "Fix suspended card handling in filtered decks" +msgstr "" + +#: src/changelog/v2.14.md:48 +msgid "Sync translations from volunteers on our crowdin.com site (thank you!)" +msgstr "" + +#: src/changelog/v2.14.md:49 +msgid "Fix crash on mismatched WebView ABIs" +msgstr "" + +#: src/changelog/v2.14.md:50 +msgid "Fix crash invalid filename handling while pasting image" +msgstr "" + +#: src/changelog/v2.14.md:51 +msgid "Fix crash selecting cards in card browser" +msgstr "" + +#: src/changelog/v2.14.md:52 +msgid "Fix crash Android 8 in card browser" +msgstr "" + +#: src/changelog/v2.14.md:53 +msgid "Fix crash in undo labeling" +msgstr "" + +#: src/changelog/v2.14.md:54 +msgid "Fix crash reset password when system browser not exported" +msgstr "" + +#: src/changelog/v2.14.md:55 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/38?closed=1)" +msgstr "" + +#: src/changelog/v2.14.md:57 +msgid "Version 2.14.0 (2020-11-18)" +msgstr "" + +#: src/changelog/v2.14.md:58 +msgid "Enabled Donations - we ❤️ you, [now you can ❤️ us 😊](https://opencollective.com/ankidroid)" +msgstr "" + +#: src/changelog/v2.14.md:59 +msgid "New Screen: Card Info (from Card Browser or as a Reviewer App Bar Button)" +msgstr "" + +#: src/changelog/v2.14.md:60 +msgid "New Screen: Help - easy access to manual, many community pages/manuals, donation page, translations" +msgstr "" + +#: src/changelog/v2.14.md:61 +msgid "Home screen: Add deck shortcut" +msgstr "" + +#: src/changelog/v2.14.md:62 +msgid "Deck Options: SchedV2: Support setting \"Hard Factor\" " +msgstr "" + +#: src/changelog/v2.14.md:63 +msgid "Card Browser: Add deck filtering" +msgstr "" + +#: src/changelog/v2.14.md:64 +msgid "Card Browser: Filter By Flag" +msgstr "" + +#: src/changelog/v2.14.md:65 +msgid "Card Browser: Adding cards defaults to selected deck" +msgstr "" + +#: src/changelog/v2.14.md:66 +msgid "Card Browser: Many more keyboard shortcuts" +msgstr "" + +#: src/changelog/v2.14.md:67 +msgid "Card Browser: Display the number of cards deleted when deleting a note" +msgstr "" + +#: src/changelog/v2.14.md:68 +msgid "Card Browser: Better handling of deck searches containing wildcards" +msgstr "" + +#: src/changelog/v2.14.md:69 +msgid "Reviewer: Basic Android TV Support" +msgstr "" + +#: src/changelog/v2.14.md:70 +msgid "Reviewer: New Gesture: Abort Learning & Sync" +msgstr "" + +#: src/changelog/v2.14.md:71 +msgid "Reviewer: Support AnkiMobile 9-area gesture touch layout" +msgstr "" + +#: src/changelog/v2.14.md:72 +msgid "Reviewer: Improve \"Empty Card\" UX" +msgstr "" + +#: src/changelog/v2.14.md:73 +msgid "Reviewer: Keyboard shortcuts for flags (Ctrl+1...4)" +msgstr "" + +#: src/changelog/v2.14.md:74 +msgid "Note Editor: Editor Toolbar (& keyboard shortcuts) - hugely requested feature!" +msgstr "" + +#: src/changelog/v2.14.md:75 +msgid "Note Editor Toolbar: Apply Custom Commands (& keyboard shortcuts)" +msgstr "" + +#: src/changelog/v2.14.md:76 +msgid "Note Editor: Paste to Insert Image" +msgstr "" + +#: src/changelog/v2.14.md:77 +msgid "Note Editor: Made fields full-width" +msgstr "" + +#: src/changelog/v2.14.md:78 +msgid "Note Editor: Change Font Size for fields" +msgstr "" + +#: src/changelog/v2.14.md:79 +msgid "Note Editor: Expand/Collapse Fields" +msgstr "" + +#: src/changelog/v2.14.md:80 +msgid "Note Editor: Clear Field button" +msgstr "" + +#: src/changelog/v2.14.md:81 +msgid "Note Editor: Ctrl+Shift+Num to switch fields" +msgstr "" + +#: src/changelog/v2.14.md:82 +msgid "Note Editor: Improved image addition / naming" +msgstr "" + +#: src/changelog/v2.14.md:83 +msgid "Note Editor: Add preference to convert newline to HTML (or not)" +msgstr "" + +#: src/changelog/v2.14.md:84 +msgid "OS Integration: Default to \"Anki Card\" in system context menu vs \"Card Browser\"" +msgstr "" + +#: src/changelog/v2.14.md:85 +msgid "Libanki: Add FileUpload API" +msgstr "" + +#: src/changelog/v2.14.md:86 +msgid "Translations: Tagged screenshots on crowdin.com to help our translators" +msgstr "" + +#: src/changelog/v2.14.md:87 +msgid "Stability: Fix rare crashes (down to ~50/day total w/1.8million installs!)" +msgstr "" + +#: src/changelog/v2.14.md:88 +msgid "Performance: massive number of speedups" +msgstr "" + +#: src/changelog/v2.14.md:89 +msgid "Dev: Massively sped up AnkiDroid builds and improved code readability" +msgstr "" + +#: src/changelog/v2.14.md:90 +msgid "Totals: 345 code changes and hundreds of translations, made by volunteers, in 2 months" +msgstr "" + +#: src/changelog/v2.14.md:91 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/30?closed=1)" +msgstr "" + +#: src/changelog/v2.13.md:1 +msgid "Version 2.13.5 (2020-10-03)" +msgstr "" + +#: src/changelog/v2.13.md:2 +msgid "Fix performance for fast (\\<1s) answers in review" +msgstr "" + +#: src/changelog/v2.13.md:3 +msgid "Add links to new Arabic help/manual translation" +msgstr "" + +#: src/changelog/v2.13.md:4 +msgid "Add back button handling to changelog display" +msgstr "" + +#: src/changelog/v2.13.md:5 +msgid "Add rate button to changelog" +msgstr "" + +#: src/changelog/v2.13.md:6 +msgid "Add warning message to handle future db upgrades" +msgstr "" + +#: src/changelog/v2.13.md:7 +msgid "Sync all translations from our volunteer translators (thanks everyone!)" +msgstr "" + +#: src/changelog/v2.13.md:9 +msgid "Version 2.13.4 (2020-09-29)" +msgstr "" + +#: src/changelog/v2.13.md:10 +msgid "Fix crash showing TagsDialog" +msgstr "" + +#: src/changelog/v2.13.md:11 +msgid "Fix crash in gesture detection" +msgstr "" + +#: src/changelog/v2.13.md:12 +msgid "Improve import interrupted error message" +msgstr "" + +#: src/changelog/v2.13.md:13 +msgid "Fix scheduler counts after undo" +msgstr "" + +#: src/changelog/v2.13.md:14 +msgid "Fix Card Browser preview after sort" +msgstr "" + +#: src/changelog/v2.13.md:15 +msgid "Fix button display if answer animation incomplete" +msgstr "" + +#: src/changelog/v2.13.md:16 +msgid "Sync all translations" +msgstr "" + +#: src/changelog/v2.13.md:18 +msgid "Version 2.13.3 (2020-09-23)" +msgstr "" + +#: src/changelog/v2.13.md:19 +msgid "Fix double-clicking answer buttons skipping cards" +msgstr "" + +#: src/changelog/v2.13.md:20 +msgid "Change missing media warning to twice-per-session not twice-per-deck" +msgstr "" + +#: src/changelog/v2.13.md:21 +msgid "Change answer button fade on open" +msgstr "" + +#: src/changelog/v2.13.md:22 +msgid "Updated all translations from volunteer crowdin.com site up to 20200923" +msgstr "" + +#: src/changelog/v2.13.md:24 +msgid "Version 2.13.2 (2020-09-19)" +msgstr "" + +#: src/changelog/v2.13.md:25 +msgid "Fix Crash rare on Card Browser exit" +msgstr "" + +#: src/changelog/v2.13.md:26 +msgid "Fix Crash Android 4.4" +msgstr "" + +#: src/changelog/v2.13.md:27 +msgid "Fix Open Deck failures / improve related messaging" +msgstr "" + +#: src/changelog/v2.13.md:28 +msgid "Fix messaging for Xioami cloze workaround" +msgstr "" + +#: src/changelog/v2.13.md:29 +msgid "Move \"set field language\" after share on Note Editor context menu" +msgstr "" + +#: src/changelog/v2.13.md:31 +msgid "Version 2.13.1 (2020-09-17)" +msgstr "" + +#: src/changelog/v2.13.md:32 +msgid "Add cloze via clipboard paste workaround on MIUI/Xiaomi devices" +msgstr "" + +#: src/changelog/v2.13.md:33 +msgid "Fix Navigation drawer respects safe display / disable animations preference" +msgstr "" + +#: src/changelog/v2.13.md:34 +msgid "Fix Reviewer buttons respect safe display / disable animations preference" +msgstr "" + +#: src/changelog/v2.13.md:35 +msgid "Fix Deck Picker bottom bar opacity" +msgstr "" + +#: src/changelog/v2.13.md:36 +msgid "Fix Error message about missing content on cards" +msgstr "" + +#: src/changelog/v2.13.md:37 +msgid "Fix crash selecting deck that disappears during sync" +msgstr "" + +#: src/changelog/v2.13.md:39 +msgid "Version 2.13.0 (2020-09-15)" +msgstr "" + +#: src/changelog/v2.13.md:40 +msgid "Field tag (such as \"{{Front}}\") appearing in a note's field will be shown as-is in cards." +msgstr "" + +#: src/changelog/v2.13.md:41 +msgid "Add Sync icon badge when changes are pending sync (can be disabled in options)" +msgstr "" + +#: src/changelog/v2.13.md:42 +msgid "Add Edit Note from card Preview while in Card Browser" +msgstr "" + +#: src/changelog/v2.13.md:43 +msgid "Add \"Anki Card\" to system context menu (like \"Card Browser\") - disabled by default" +msgstr "" + +#: src/changelog/v2.13.md:44 +msgid "Add Set keyboard language for specific fields in the note editor (example: one field Japanese, other field Portuguese for input)." +msgstr "" + +#: src/changelog/v2.13.md:45 +msgid "Add Keep keyboard open after adding a note" +msgstr "" + +#: src/changelog/v2.13.md:46 +msgid "Add Card properties available in JavaScript API" +msgstr "" + +#: src/changelog/v2.13.md:47 +msgid "Add JavaScript API versioning for scripts (basis for future plugins)" +msgstr "" + +#: src/changelog/v2.13.md:48 +msgid "Add Auto-Login when selecting saved user account" +msgstr "" + +#: src/changelog/v2.13.md:49 +msgid "Add Allow import of collection.anki21 files when under SchedV1" +msgstr "" + +#: src/changelog/v2.13.md:50 +msgid "Add New screen for first-time users" +msgstr "" + +#: src/changelog/v2.13.md:51 +msgid "Add Button animations when answering cards" +msgstr "" + +#: src/changelog/v2.13.md:52 +msgid "Add Note Editor: Add shortcuts Ctrl+(Alt)+Shift+C to add a cloze." +msgstr "" + +#: src/changelog/v2.13.md:53 +msgid "Fix Some cards in learning were not shown at the right time (Only if you undo/bury/suspend/reset/reschedule and the next card goes to learning mode)" +msgstr "" + +#: src/changelog/v2.13.md:54 +msgid "Fix Selected deck has translucent background if a deck picker background is set" +msgstr "" + +#: src/changelog/v2.13.md:55 +msgid "Fix Improved preview screens" +msgstr "" + +#: src/changelog/v2.13.md:56 +msgid "Fix Better accessibility in Deck Browser for partially sighted users" +msgstr "" + +#: src/changelog/v2.13.md:57 +msgid "Fix Improve visibility of \"Add/Remove Option Group\"" +msgstr "" + +#: src/changelog/v2.13.md:58 +msgid "Fix Improved messages for sync rate limiting error" +msgstr "" + +#: src/changelog/v2.13.md:59 +msgid "Fix Improved messages for reducing study limits" +msgstr "" + +#: src/changelog/v2.13.md:60 +msgid "Fix Improved messaging when collection is missing media" +msgstr "" + +#: src/changelog/v2.13.md:61 +msgid "Fix Improve feedback when accessing Debug Info" +msgstr "" + +#: src/changelog/v2.13.md:62 +msgid "Fix Add additional warnings to reschedule dialog" +msgstr "" + +#: src/changelog/v2.13.md:63 +msgid "Fix Whiteboard pen color can be disabled by pressing icon again" +msgstr "" + +#: src/changelog/v2.13.md:64 +msgid "Fix Ensure all menu items in the reviewer can be customized by \"App Bar Buttons\" setting" +msgstr "" + +#: src/changelog/v2.13.md:65 +msgid "Fix Scheduler discrepancy handling early interval on filtered decks" +msgstr "" + +#: src/changelog/v2.13.md:66 +msgid "Fix Exports work when cards are missing media" +msgstr "" + +#: src/changelog/v2.13.md:67 +msgid "Fix Crash due to logging." +msgstr "" + +#: src/changelog/v2.13.md:68 +msgid "Fix Toasts used to show one more card than the number of card actually reviewed during the time box" +msgstr "" + +#: src/changelog/v2.13.md:69 +msgid "Fix Handle newlines properly in Note Editor Preview" +msgstr "" + +#: src/changelog/v2.13.md:70 +msgid "Fix Improve AnkiDroid opening animation" +msgstr "" + +#: src/changelog/v2.13.md:71 +msgid "Fix Show correct answer button when answering via Keyboard" +msgstr "" + +#: src/changelog/v2.13.md:72 +msgid "Fix \"New Cards Added\" Statistic" +msgstr "" + +#: src/changelog/v2.13.md:73 +msgid "Fix Crash when inserting a cloze when selecting text from right-to-left via keyboard" +msgstr "" + +#: src/changelog/v2.13.md:74 +msgid "Fix \"Show Password\" icon revealing saved password" +msgstr "" + +#: src/changelog/v2.13.md:75 +msgid "Fix Card browser still contains card after the app goes into background" +msgstr "" + +#: src/changelog/v2.13.md:76 +msgid "Fix Daily unbury occurs during sync if necessary" +msgstr "" + +#: src/changelog/v2.13.md:77 +msgid "Fix On big screen, buttons moved during loading" +msgstr "" + +#: src/changelog/v2.13.md:78 +msgid "Translators If some text change because of minor changes (typos) you won't have to translate it again" +msgstr "" + +#: src/changelog/v2.13.md:79 +msgid "Performance improvements (specifically: initial loading of large collection (lot of decks, note type, card type, fields, long templates...), card browser, deck picker startup, next card view, undo, cancelling tasks such as computing a list of card in browser)" +msgstr "" + +#: src/changelog/v2.13.md:80 +msgid "Dev: Massive dev workflow improvements and automated checks for our translations." +msgstr "" + +#: src/changelog/v2.13.md:81 +msgid "Dev: Implement backend for CSV Importer" +msgstr "" + +#: src/changelog/v2.13.md:82 +msgid "Dev: Improve crash reporting on app startup" +msgstr "" + +#: src/changelog/v2.13.md:83 +msgid "Dev: Massive improvement in testing, especially around scheduler / card queue behavior" +msgstr "" + +#: src/changelog/v2.13.md:84 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/27?closed=1)" +msgstr "" + +#: src/changelog/v2.12.md:1 +msgid "Version 2.12.1 (2020-07-21)" +msgstr "" + +#: src/changelog/v2.12.md:2 +msgid "Fix bug previewing edited notes after changing field count" +msgstr "" + +#: src/changelog/v2.12.md:3 +msgid "Fix crash previewing edited notes from dynamic decks" +msgstr "" + +#: src/changelog/v2.12.md:4 +msgid "Fix crash restarting app after a crash" +msgstr "" + +#: src/changelog/v2.12.md:5 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/28?closed=1)" +msgstr "" + +#: src/changelog/v2.12.md:7 +msgid "Version 2.12.0 (2020-07-18)" +msgstr "" + +#: src/changelog/v2.12.md:8 +msgid "Add Crop image feature" +msgstr "" + +#: src/changelog/v2.12.md:9 +msgid "Add Preview in note editor" +msgstr "" + +#: src/changelog/v2.12.md:10 +msgid "Add edit tags in reviewer" +msgstr "" + +#: src/changelog/v2.12.md:11 +msgid "Add volume buttons as gestures" +msgstr "" + +#: src/changelog/v2.12.md:12 +msgid "Add whiteboard pen color" +msgstr "" + +#: src/changelog/v2.12.md:13 +msgid "Add microphone tool bar in reviewer" +msgstr "" + +#: src/changelog/v2.12.md:14 +msgid "Add javascript API (check the Wiki!)" +msgstr "" + +#: src/changelog/v2.12.md:15 +msgid "Improve: app is 3MB smaller" +msgstr "" + +#: src/changelog/v2.12.md:16 +msgid "Fix: show whole tag in tags dialog" +msgstr "" + +#: src/changelog/v2.12.md:17 +msgid "Fix copy note copies tags too" +msgstr "" + +#: src/changelog/v2.12.md:18 +msgid "Fix data corruption canceling template edits" +msgstr "" + +#: src/changelog/v2.12.md:19 +msgid "performance and bug fixes everywhere!" +msgstr "" + +#: src/changelog/v2.12.md:21 +msgid "11 volunteers made hundreds of individual changes this release" +msgstr "" + +#: src/changelog/v2.12.md:23 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/18?closed=1)" +msgstr "" + +#: src/changelog/v2.11.md:1 +msgid "Version 2.11.3 (2020-06-17)" +msgstr "" + +#: src/changelog/v2.11.md:2 +msgid "Fix out-of-memory errors when importing very large decks" +msgstr "" + +#: src/changelog/v2.11.md:3 +msgid "Fix incorrect out-of-space message on import in Android 4" +msgstr "" + +#: src/changelog/v2.11.md:4 +msgid "Fix crash if card viewer closed quickly after view" +msgstr "" + +#: src/changelog/v2.11.md:5 +msgid "Fix unzip fail on .apkg files >2GB" +msgstr "" + +#: src/changelog/v2.11.md:6 +msgid "Fix crash on edit note in browser multi-select" +msgstr "" + +#: src/changelog/v2.11.md:8 +msgid "Version 2.11.2 (2020-06-10)" +msgstr "" + +#: src/changelog/v2.11.md:9 +msgid "Add santali language" +msgstr "" + +#: src/changelog/v2.11.md:10 +msgid "Fix Hebrew, Indonesian, Tagalog languages" +msgstr "" + +#: src/changelog/v2.11.md:11 +msgid "Improve error reporting around apkg import failures" +msgstr "" + +#: src/changelog/v2.11.md:12 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/24?closed=1)" +msgstr "" + +#: src/changelog/v2.11.md:14 +msgid "Version 2.11.1 (2020-06-08)" +msgstr "" + +#: src/changelog/v2.11.md:15 +msgid "Fix crash in Card Browser multi-select mode" +msgstr "" + +#: src/changelog/v2.11.md:16 +msgid "Fix Custom Steps interval dialog space entry issue" +msgstr "" + +#: src/changelog/v2.11.md:17 +msgid "Fix flags don't export with deck" +msgstr "" + +#: src/changelog/v2.11.md:18 +msgid "Fix AnkiDroid API doesn't handle null model id (Anki Compatibility workaround)" +msgstr "" + +#: src/changelog/v2.11.md:19 +msgid "Fix translation crash in sync dialog in Azerbaijani" +msgstr "" + +#: src/changelog/v2.11.md:20 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/23?closed=1)" +msgstr "" + +#: src/changelog/v2.11.md:22 +msgid "Version 2.11.0 (2020-06-05)" +msgstr "" + +#: src/changelog/v2.11.md:23 +msgid "Android minimum supported version is now 4.1 / Jelly Bean / API16 (AnkiWeb Compatibility)" +msgstr "" + +#: src/changelog/v2.11.md:24 +msgid "Change sibling burying should default to off (Anki Compatibility)" +msgstr "" + +#: src/changelog/v2.11.md:25 +msgid "Change learn cards do not go in filtered decks in v1 sched (Anki Compatibility)" +msgstr "" + +#: src/changelog/v2.11.md:26 +msgid "Add Browser Appearance screen, to edit Card Browser render format (Anki Compatibility)" +msgstr "" + +#: src/changelog/v2.11.md:27 +msgid "Add guidance in Note Editor if no cards will be generated despite full fields" +msgstr "" + +#: src/changelog/v2.11.md:28 +msgid "Add all translations from our crowdin.com translation site" +msgstr "" + +#: src/changelog/v2.11.md:29 +msgid "Add ability to decrease daily limit in custom study (Anki Compatibility)" +msgstr "" + +#: src/changelog/v2.11.md:30 +msgid "Add ability to block gesture handling when tapping hints in Reviewer" +msgstr "" + +#: src/changelog/v2.11.md:31 +msgid "Add create subdeck option in deck list long-press context menu" +msgstr "" + +#: src/changelog/v2.11.md:32 +msgid "Add edit note action in Card Browser multi-select mode" +msgstr "" + +#: src/changelog/v2.11.md:33 +msgid "Add ability to turn off 'Card Browser' system text context menu item" +msgstr "" + +#: src/changelog/v2.11.md:34 +msgid "Add nightMode CSS selector for card HTML (Anki Compatibility)" +msgstr "" + +#: src/changelog/v2.11.md:35 +msgid "Add ability to change just the case of a deck name" +msgstr "" + +#: src/changelog/v2.11.md:36 +msgid "Add page-up/page-down gestures" +msgstr "" + +#: src/changelog/v2.11.md:37 +msgid "Improve gesture handling in full-screen / immersive mode" +msgstr "" + +#: src/changelog/v2.11.md:38 +msgid "Improve handling of cloze deletion in TTS mode" +msgstr "" + +#: src/changelog/v2.11.md:39 +msgid "Improve Card Browser search from Android text selection menu" +msgstr "" + +#: src/changelog/v2.11.md:40 +msgid "Improve Card Browser with default hide of media filenames" +msgstr "" + +#: src/changelog/v2.11.md:41 +msgid "Improve Reviewer auto-advance by waiting for TTS to finish" +msgstr "" + +#: src/changelog/v2.11.md:42 +msgid "Improve transparent SVG display in night mode with white background" +msgstr "" + +#: src/changelog/v2.11.md:43 +msgid "Improve anki package import handling" +msgstr "" + +#: src/changelog/v2.11.md:44 +msgid "Improve AnkiWeb login form enter button handling" +msgstr "" + +#: src/changelog/v2.11.md:45 +msgid "Improve hardware back button handling in restore from backup" +msgstr "" + +#: src/changelog/v2.11.md:46 +msgid "Improve Reviewer display of un-rendered LaTeX" +msgstr "" + +#: src/changelog/v2.11.md:47 +msgid "Improve TTS / auto-answer combination, wait for TTS before advance" +msgstr "" + +#: src/changelog/v2.11.md:48 +msgid "Workaround Firefox open downloaded deck bug" +msgstr "" + +#: src/changelog/v2.11.md:49 +msgid "Workaround crash on Samsung devices with >500 deck reminders" +msgstr "" + +#: src/changelog/v2.11.md:50 +msgid "Fix card template editor mistakenly allowing add template on cloze type" +msgstr "" + +#: src/changelog/v2.11.md:51 +msgid "Fix language change preference" +msgstr "" + +#: src/changelog/v2.11.md:52 +msgid "Fix ability to unbury a deck in deck list" +msgstr "" + +#: src/changelog/v2.11.md:53 +msgid "Fix app bar item flicker during review" +msgstr "" + +#: src/changelog/v2.11.md:54 +msgid "Fix V2 scheduler learning card count after undo" +msgstr "" + +#: src/changelog/v2.11.md:55 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/13?closed=1)" +msgstr "" + +#: src/changelog/v2.10.md:1 +msgid "Version 2.10.4 (2020-05-31)" +msgstr "" + +#: src/changelog/v2.10.md:2 +msgid "Workaround expired AnkiWeb SSL Root certificate" +msgstr "" + +#: src/changelog/v2.10.md:3 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/22?closed=1)" +msgstr "" + +#: src/changelog/v2.10.md:5 +msgid "Version 2.10.3 (2020-05-29)" +msgstr "" + +#: src/changelog/v2.10.md:6 +msgid "Fix crash on no permissions on Card Browser system text menu entry" +msgstr "" + +#: src/changelog/v2.10.md:7 +msgid "Fix crash in widget if external storage unmounts" +msgstr "" + +#: src/changelog/v2.10.md:8 +msgid "Fix crash on device reboot if no permissions" +msgstr "" + +#: src/changelog/v2.10.md:9 +msgid "Fix crash if deck picker background image too large" +msgstr "" + +#: src/changelog/v2.10.md:10 +msgid "Fix crash in tags dialog" +msgstr "" + +#: src/changelog/v2.10.md:11 +msgid "Fix bad data generated for null objects (Anki compatibility)" +msgstr "" + +#: src/changelog/v2.10.md:12 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/21?closed=1)" +msgstr "" + +#: src/changelog/v2.10.md:14 +msgid "Version 2.10.2 (2020-05-14)" +msgstr "" + +#: src/changelog/v2.10.md:15 +msgid "Fix type answer cards not rendering correctly" +msgstr "" + +#: src/changelog/v2.10.md:16 +msgid "Fix type answer card template creation on non-English new installs" +msgstr "" + +#: src/changelog/v2.10.md:17 +msgid "Fix frequent full sync caused by incorrect learning card counts" +msgstr "" + +#: src/changelog/v2.10.md:18 +msgid "Fix crash importing into fresh install with no storage permission" +msgstr "" + +#: src/changelog/v2.10.md:20 +msgid "Version 2.10.1 (2020-05-13)" +msgstr "" + +#: src/changelog/v2.10.md:21 +msgid "Updated all translations from crowdin translators" +msgstr "" + +#: src/changelog/v2.10.md:22 +msgid "Fix crash note editor on rapid back button" +msgstr "" + +#: src/changelog/v2.10.md:23 +msgid "Fix crash from incorrect Thai translation" +msgstr "" + +#: src/changelog/v2.10.md:25 +msgid "Version 2.10 (2020-05-12)" +msgstr "" + +#: src/changelog/v2.10.md:26 +msgid "Add welcome dialog explaining need for storage permission" +msgstr "" + +#: src/changelog/v2.10.md:27 +msgid "Add support for Flags on cards (including flagging by gesture)" +msgstr "" + +#: src/changelog/v2.10.md:28 +msgid "Add ability to set background image in Deck Picker" +msgstr "" + +#: src/changelog/v2.10.md:29 +msgid "Add localization of standard templates created in fresh install" +msgstr "" + +#: src/changelog/v2.10.md:30 +msgid "Add support for card javascript to reload current card programmatically" +msgstr "" + +#: src/changelog/v2.10.md:31 +msgid "Add support for restricted learning / classroom devices" +msgstr "" + +#: src/changelog/v2.10.md:32 +msgid "Add preference to disable \"Extended Text UI\" full-screen editor" +msgstr "" + +#: src/changelog/v2.10.md:33 +msgid "Add CSS style capability to heavy checkmark and down arrow in card" +msgstr "" + +#: src/changelog/v2.10.md:34 +msgid "Add display of current interval on reschedule dialog" +msgstr "" + +#: src/changelog/v2.10.md:35 +msgid "Add support for card javascript to answer cards programmatically" +msgstr "" + +#: src/changelog/v2.10.md:36 +msgid "Add ability to toggle sticky field in field editor" +msgstr "" + +#: src/changelog/v2.10.md:37 +msgid "Improve deck list newline, style, script tag handling in deck descriptions" +msgstr "" + +#: src/changelog/v2.10.md:38 +msgid "Improve whiteboard on/off state handling, especially between day/night mode" +msgstr "" + +#: src/changelog/v2.10.md:39 +msgid "Improve multi-selection options in CardBrowser" +msgstr "" + +#: src/changelog/v2.10.md:40 +msgid "Improve performance (systematic optimization process, lots of improvements!)" +msgstr "" + +#: src/changelog/v2.10.md:41 +msgid "Improve handling of erroneous notes (missing fields, improper clozes)" +msgstr "" + +#: src/changelog/v2.10.md:42 +msgid "Improve user messaging on network connection failures" +msgstr "" + +#: src/changelog/v2.10.md:43 +msgid "Improve counting of suspended/buried cards in advanced statistics" +msgstr "" + +#: src/changelog/v2.10.md:44 +msgid "Improve v2 scheduler compatibility with Anki ecosystem" +msgstr "" + +#: src/changelog/v2.10.md:45 +msgid "Improve handling / detection of full sync need" +msgstr "" + +#: src/changelog/v2.10.md:46 +msgid "Improve Anki compatibility by allowing more field/model/deck name characters" +msgstr "" + +#: src/changelog/v2.10.md:47 +msgid "Improve deck list estimated review times with human scale times" +msgstr "" + +#: src/changelog/v2.10.md:48 +msgid "Fix text scaling bug in card browser" +msgstr "" + +#: src/changelog/v2.10.md:49 +msgid "Fix crash in export while using v2 scheduler" +msgstr "" + +#: src/changelog/v2.10.md:50 +msgid "Fix Custom Tabs crash with non-default system web browser" +msgstr "" + +#: src/changelog/v2.10.md:51 +msgid "Fix issues with import of packages with long Unicode names" +msgstr "" + +#: src/changelog/v2.10.md:52 +msgid "Fix incorrect intervals on lapsed filtered v2 scheduler cards" +msgstr "" + +#: src/changelog/v2.10.md:53 +msgid "Fix multimedia editor save/cancel behavior" +msgstr "" + +#: src/changelog/v2.10.md:54 +msgid "Fix incorrect button/gesture availability while existing task is still active" +msgstr "" + +#: src/changelog/v2.10.md:55 +msgid "Fix type answer crash on invalid characters" +msgstr "" + +#: src/changelog/v2.10.md:56 +msgid "Fix cloze references not being recognized in all fields" +msgstr "" + +#: src/changelog/v2.10.md:57 +msgid "Fix invalid ability to change deck to a filtered deck" +msgstr "" + +#: src/changelog/v2.10.md:58 +msgid "Fix crashes on adding invalid images, audios, and videos" +msgstr "" + +#: src/changelog/v2.10.md:59 +msgid "Fix CardBrowser crash after deleting card" +msgstr "" + +#: src/changelog/v2.10.md:60 +msgid "Fix crash and help user if no browser detected" +msgstr "" + +#: src/changelog/v2.10.md:61 +msgid "Fix Reviewer crash if card not available" +msgstr "" + +#: src/changelog/v2.10.md:62 +msgid "Fix crash / improve import of pasted decks" +msgstr "" + +#: src/changelog/v2.10.md:63 +msgid "Fix clicking hint field blocks key input in Reviewer" +msgstr "" + +#: src/changelog/v2.10.md:64 +msgid "Fix Previewer forgetting which card to show on device rotation" +msgstr "" + +#: src/changelog/v2.10.md:65 +msgid "Fix Mathjax/cloze interactions" +msgstr "" + +#: src/changelog/v2.10.md:66 +msgid "Fix vertical alignment of touch area in full-screen review" +msgstr "" + +#: src/changelog/v2.10.md:67 +msgid "Fix handling of ':::' in deck names" +msgstr "" + +#: src/changelog/v2.10.md:68 +msgid "Fix incorrect display of HTML comments in card browser" +msgstr "" + +#: src/changelog/v2.9.md:1 +msgid "Version 2.9.7 (2020-04-30)" +msgstr "" + +#: src/changelog/v2.9.md:2 +msgid "Fix crash / workaround deck options timer config regression in AnkiDesktop" +msgstr "" + +#: src/changelog/v2.9.md:4 +msgid "Version 2.9.6 (2020-04-03)" +msgstr "" + +#: src/changelog/v2.9.md:5 +msgid "Fix multimedia crashes (permissions handling, image add, preview)" +msgstr "" + +#: src/changelog/v2.9.md:6 +msgid "Fix UI and crashes in database check (user dialog + exception handling)" +msgstr "" + +#: src/changelog/v2.9.md:7 +msgid "Fix Windows 10 image compatibility issue with image paths" +msgstr "" + +#: src/changelog/v2.9.md:8 +msgid "Fix AnkiDesktop sync compatibility issue if more than 1000 cards due" +msgstr "" + +#: src/changelog/v2.9.md:9 +msgid "Fix crash in card browser render" +msgstr "" + +#: src/changelog/v2.9.md:10 +msgid "Fix parsing of image tags in card browser" +msgstr "" + +#: src/changelog/v2.9.md:11 +msgid "Fix crash in StudyOptionsFragment" +msgstr "" + +#: src/changelog/v2.9.md:12 +msgid "Fix issue with deck options group changing on export" +msgstr "" + +#: src/changelog/v2.9.md:13 +msgid "Fix issue with exports containing unexpected media" +msgstr "" + +#: src/changelog/v2.9.md:14 +msgid "Fix issue with dynamic decks (crash fix, export fix)" +msgstr "" + +#: src/changelog/v2.9.md:15 +msgid "Fix high frequency issue \"AnkiDroid directory is inaccessible\"" +msgstr "" + +#: src/changelog/v2.9.md:16 +msgid "Fix high frequency WebView (card viewer) crash" +msgstr "" + +#: src/changelog/v2.9.md:17 +msgid "Add columns to card browser (due, ease, changed, created, edited)" +msgstr "" + +#: src/changelog/v2.9.md:18 +msgid "Fix card scheduler not respecting maximum intervals" +msgstr "" + +#: src/changelog/v2.9.md:19 +msgid "Fix card browser spins forever on images or empty strings" +msgstr "" + +#: src/changelog/v2.9.md:21 +msgid "Version 2.9.5 (2020-03-15)" +msgstr "" + +#: src/changelog/v2.9.md:22 +msgid "Fix crash rendering card list while updating card browser search" +msgstr "" + +#: src/changelog/v2.9.md:23 +msgid "Fix case-sensitivity issue with pronunciation words not being found" +msgstr "" + +#: src/changelog/v2.9.md:24 +msgid "Fix crash caused by auto-sync on startup showing dialog too soon" +msgstr "" + +#: src/changelog/v2.9.md:25 +msgid "Fix crash on preview of TTS cards showing language selectiond dialog too slowly" +msgstr "" + +#: src/changelog/v2.9.md:26 +msgid "Fix crash on import if collection not found" +msgstr "" + +#: src/changelog/v2.9.md:27 +msgid "Fix Anki ecosystem deck configuration issue for Anki Desktop users \\<= 2.16" +msgstr "" + +#: src/changelog/v2.9.md:28 +msgid "Fix crash if user attempts to open camera or gallery and no app is available" +msgstr "" + +#: src/changelog/v2.9.md:29 +msgid "Fix crash building deck reminders while deck is synchronizing" +msgstr "" + +#: src/changelog/v2.9.md:30 +msgid "Fix crash related to audio recording stop" +msgstr "" + +#: src/changelog/v2.9.md:31 +msgid "Show helpful messages if import fails because device is out of space" +msgstr "" + +#: src/changelog/v2.9.md:32 +msgid "Fix crash when taking pictures on devices with Lollipop and older" +msgstr "" + +#: src/changelog/v2.9.md:34 +msgid "Version 2.9.4 (2020-02-18)" +msgstr "" + +#: src/changelog/v2.9.md:35 +msgid "Fix crash when fetching pronunciations in note editor" +msgstr "" + +#: src/changelog/v2.9.md:36 +msgid "Fix issue with pronunciation words not being found" +msgstr "" + +#: src/changelog/v2.9.md:37 +msgid "Fix crash on startup for users with auto-sync on startup" +msgstr "" + +#: src/changelog/v2.9.md:38 +msgid "Fix crash on deck import when app is in background" +msgstr "" + +#: src/changelog/v2.9.md:39 +msgid "Fix crash for users of Google Chrome Canary" +msgstr "" + +#: src/changelog/v2.9.md:40 +msgid "Fix crash when adding certain audio clips" +msgstr "" + +#: src/changelog/v2.9.md:41 +msgid "Fix crash related to fetching Sound metadata" +msgstr "" + +#: src/changelog/v2.9.md:42 +msgid "Fix issue where audio plays twice" +msgstr "" + +#: src/changelog/v2.9.md:44 +msgid "Version 2.9.3 (2020-02-09)" +msgstr "" + +#: src/changelog/v2.9.md:45 +msgid "Fix issues with connection timeouts and new encryption library" +msgstr "" + +#: src/changelog/v2.9.md:46 +msgid "Fix incorrect handling of decks with ':::' in their name" +msgstr "" + +#: src/changelog/v2.9.md:48 +msgid "Version 2.9.2 (2020-02-03)" +msgstr "" + +#: src/changelog/v2.9.md:49 +msgid "Add support for new AnkiWeb encryption changes" +msgstr "" + +#: src/changelog/v2.9.md:50 +msgid "Fix some bugs using filtered decks" +msgstr "" + +#: src/changelog/v2.9.md:51 +msgid "Fix crash on app startup with uninitialized collection" +msgstr "" + +#: src/changelog/v2.9.md:52 +msgid "Fix some issues with new cloze deletion menu" +msgstr "" + +#: src/changelog/v2.9.md:53 +msgid "Fix issue with Mathjax + cloze deletion" +msgstr "" + +#: src/changelog/v2.9.md:54 +msgid "Fix incorrect intervals bug with new scheduler" +msgstr "" + +#: src/changelog/v2.9.md:55 +msgid "Add various patches from Anki Desktop" +msgstr "" + +#: src/changelog/v2.9.md:57 +msgid "Version 2.9.1 (2019-10-16)" +msgstr "" + +#: src/changelog/v2.9.md:58 +msgid "Fix crash reviewing on Android 5 - 7" +msgstr "" + +#: src/changelog/v2.9.md:59 +msgid "Fix crash on Hungarian translation" +msgstr "" + +#: src/changelog/v2.9.md:61 +msgid "Version 2.9 (2019-10-14)" +msgstr "" + +#: src/changelog/v2.9.md:62 +msgid "Change to new adaptive icon" +msgstr "" + +#: src/changelog/v2.9.md:63 +msgid "Add multi-select in the card browser (delete, change deck, reschedule)" +msgstr "" + +#: src/changelog/v2.9.md:64 +msgid "Add support for new Anki 2.1 scheduler" +msgstr "" + +#: src/changelog/v2.9.md:65 +msgid "Add support for Mathjax" +msgstr "" + +#: src/changelog/v2.9.md:66 +msgid "Add ability to add local audio files to notes" +msgstr "" + +#: src/changelog/v2.9.md:67 +msgid "Add ability to specify filename and folder on export and import" +msgstr "" + +#: src/changelog/v2.9.md:68 +msgid "Add ability to insert cloze in Note Editor" +msgstr "" + +#: src/changelog/v2.9.md:69 +msgid "Add ability to reposition cards " +msgstr "" + +#: src/changelog/v2.9.md:70 +msgid "Add ability to use due reminders for specific decks" +msgstr "" + +#: src/changelog/v2.9.md:71 +msgid "Add support for gamepad input when reviewing" +msgstr "" + +#: src/changelog/v2.9.md:72 +msgid "Add support for common keyboard shortcuts from Anki Desktop" +msgstr "" + +#: src/changelog/v2.9.md:73 +msgid "Add ability to search in Card Browser for text from system context menu" +msgstr "" + +#: src/changelog/v2.9.md:74 +msgid "Add ability to recognize tts HTML elements in questions and answers" +msgstr "" + +#: src/changelog/v2.9.md:75 +msgid "Add ability to display LaTeX rendered to SVG (vs PNG) from Anki Desktop" +msgstr "" + +#: src/changelog/v2.9.md:76 +msgid "Add confirmation check for full sync trigger in preferences" +msgstr "" + +#: src/changelog/v2.9.md:77 +msgid "Fix excessive pull-to-sync false positives. Disable when not at top of page." +msgstr "" + +#: src/changelog/v2.9.md:78 +msgid "Fix some issues with focus in Note Editor" +msgstr "" + +#: src/changelog/v2.9.md:79 +msgid "Fix media sync errors related to file creation issues" +msgstr "" + +#: src/changelog/v2.9.md:80 +msgid "Fix crash related to use of camera without permission or no camera hardware " +msgstr "" + +#: src/changelog/v2.9.md:81 +msgid "Fix crash related to Card Browser allowing preview with no cards selected" +msgstr "" + +#: src/changelog/v2.9.md:82 +msgid "Fix crash in Reviewer when collection inaccessible" +msgstr "" + +#: src/changelog/v2.9.md:83 +msgid "Fix crash related to TTS when TTS not initialized" +msgstr "" + +#: src/changelog/v2.9.md:84 +msgid "Fix crash related to sdcard mount/unmount on inaccessible collection" +msgstr "" + +#: src/changelog/v2.9.md:85 +msgid "Fix crash related to audio button being visible after loading pronunciation media" +msgstr "" + +#: src/changelog/v2.9.md:86 +msgid "Fix crash when attempting to import invalid zip files " +msgstr "" + +#: src/changelog/v2.9.md:87 +msgid "Fix crash related to switching from split-window mode to single-window mode" +msgstr "" + +#: src/changelog/v2.9.md:88 +msgid "Fix crash related to missing preferences in Preference editor" +msgstr "" + +#: src/changelog/v2.9.md:89 +msgid "Fix crash on deck selection after deleting a deck and immediately closing app" +msgstr "" + +#: src/changelog/v2.9.md:90 +msgid "Fix crash in Reviewer when non-standard browser installed" +msgstr "" + +#: src/changelog/v2.9.md:91 +msgid "Fix type-answer field showing unexpectedly after undo in Reviewer" +msgstr "" + +#: src/changelog/v2.9.md:92 +msgid "Fix incorrect display of some characters when using type-answer" +msgstr "" + +#: src/changelog/v2.9.md:93 +msgid "Fix error related to media in subfolders not showing in Reviewer" +msgstr "" + +#: src/changelog/v2.9.md:94 +msgid "Fix some issues with generated flashcard html and CSS selectors" +msgstr "" + +#: src/changelog/v2.9.md:95 +msgid "Fix some Glosbe and Beolingus regressions" +msgstr "" + +#: src/changelog/v2.9.md:96 +msgid "Fix issue where new deck was created when note type was renamed" +msgstr "" + +#: src/changelog/v2.9.md:97 +msgid "Fix add note button disappearing from Card Browser when returning from search" +msgstr "" + +#: src/changelog/v2.9.md:98 +msgid "Fix some statistics display issues " +msgstr "" + +#: src/changelog/v2.9.md:99 +msgid "Fix incorrect display of some preferences" +msgstr "" + +#: src/changelog/v2.9.md:100 +msgid "Fix invisible notification bar in NoteEditor" +msgstr "" + +#: src/changelog/v2.9.md:101 +msgid "Fix newline characters not working in cloze deletions" +msgstr "" + +#: src/changelog/v2.9.md:102 +msgid "Increase max card count display from 1000 to 99999" +msgstr "" + +#: src/changelog/v2.9.md:103 +msgid "Improve display handling of very long review intervals (> 68 years)" +msgstr "" + +#: src/changelog/v2.9.md:104 +msgid "Improve next/back buttons when using Previewer on multiple cards" +msgstr "" + +#: src/changelog/v2.9.md:105 +msgid "Improve handling of selected deck between statistics, card browser and deck picker" +msgstr "" + +#: src/changelog/v2.9.md:106 +msgid "Improve Card Browser search by restoring when returning from other activities" +msgstr "" + +#: src/changelog/v2.9.md:107 +msgid "Improve card focus handling when moving between Note Editor and Card Template Editor" +msgstr "" + +#: src/changelog/v2.9.md:108 +msgid "Improve labeling of deck-group vs deck-specific options" +msgstr "" + +#: src/changelog/v2.9.md:109 +msgid "Improve formatting of HTTP error codes during sync" +msgstr "" + +#: src/changelog/v2.9.md:110 +msgid "Improve handling of multi-touch events while whiteboard displayed" +msgstr "" + +#: src/changelog/v2.9.md:111 +msgid "Improve permission dialog descriptions" +msgstr "" + +#: src/changelog/v2.9.md:112 +msgid "Improve handling of \"preview new cards\" setting when creating custom study deck" +msgstr "" + +#: src/changelog/v2.9.md:113 +msgid "Improve Navigation Drawer performance on older devices" +msgstr "" + +#: src/changelog/v2.9.md:114 +msgid "Improve database check dialog with addition progress updates during check" +msgstr "" + +#: src/changelog/v2.9.md:115 +msgid "Use different notification channels for study reminders and general notifications" +msgstr "" + +#: src/changelog/v2.9.md:116 +msgid "Drop support for Android \\< Ice Cream Sandwich MR1 (API15, Android 4.0.3)" +msgstr "" + +#: src/changelog/v2.9.md:117 +msgid "Add support for more features on Chromebook (import, export, restore backup, camera)" +msgstr "" + +#: src/changelog/v2.9.md:118 +msgid "Add API support for card/note bury and suspend" +msgstr "" + +#: src/changelog/v2.9.md:119 +msgid "Add API to open Reviewer on specific decks from other apps" +msgstr "" + +#: src/changelog/v2.9.md:120 +msgid "Add support for HTML/Javascript debugging" +msgstr "" + +#: src/changelog/v2.9.md:121 +msgid "Add link to third party apps which support AnkiDroid API in advanced preferences" +msgstr "" + +#: src/changelog/v2.9.md:122 +msgid "Fix issue with custom sync server certificates" +msgstr "" + +#: src/changelog/v2.9.md:123 +msgid "Perform basic DB integrity check on app upgrade" +msgstr "" + +#: src/changelog/v2.9.md:124 +msgid "Introduce optional analytics reporting" +msgstr "" + +#: src/changelog/v2.8.md:1 +msgid "Version 2.8.4 (2018-04-27)" +msgstr "" + +#: src/changelog/v2.8.md:2 +msgid "Fix error syncing due to too many card templates" +msgstr "" + +#: src/changelog/v2.8.md:4 +msgid "Version 2.8.3 (2017-11-10)" +msgstr "" + +#: src/changelog/v2.8.md:5 +msgid "Fix crash adding a picture from camera" +msgstr "" + +#: src/changelog/v2.8.md:6 +msgid "Fix add note icon disappearing in browser after search" +msgstr "" + +#: src/changelog/v2.8.md:7 +msgid "Fix translations from Glosbe" +msgstr "" + +#: src/changelog/v2.8.md:8 +msgid "Fix crash long-tapping when no deck is selected" +msgstr "" + +#: src/changelog/v2.8.md:9 +msgid "Fix crash entering advanced settings on some devices" +msgstr "" + +#: src/changelog/v2.8.md:10 +msgid "Fix incorrect graph display in statistics" +msgstr "" + +#: src/changelog/v2.8.md:11 +msgid "Fix deck not changing properly in statistics" +msgstr "" + +#: src/changelog/v2.8.md:12 +msgid "Fix rounding error in statistics weekly breakdown" +msgstr "" + +#: src/changelog/v2.8.md:13 +msgid "Fix spurious new deck created on model rename" +msgstr "" + +#: src/changelog/v2.8.md:14 +msgid "Improve error message on exception during media sync" +msgstr "" + +#: src/changelog/v2.8.md:15 +msgid "Improve animation when transitioning between screens" +msgstr "" + +#: src/changelog/v2.8.md:16 +msgid "Use a round icon on devices that support it" +msgstr "" + +#: src/changelog/v2.8.md:18 +msgid "Version 2.8.2 (2017-02-28)" +msgstr "" + +#: src/changelog/v2.8.md:19 +msgid "Fix bugs showing confirmation dialogs in various places" +msgstr "" + +#: src/changelog/v2.8.md:20 +msgid "Fix uncommon crash showing dialog after sync" +msgstr "" + +#: src/changelog/v2.8.md:22 +msgid "Version 2.8.1 (2017-02-06)" +msgstr "" + +#: src/changelog/v2.8.md:23 +msgid "Allow sending exported apkg to arbitrary app (e.g. Google Drive)" +msgstr "" + +#: src/changelog/v2.8.md:24 +msgid "Allow AnkiWeb to display a warning on sync completion" +msgstr "" + +#: src/changelog/v2.8.md:25 +msgid "Fix potential full-sync after sync cancellation" +msgstr "" + +#: src/changelog/v2.8.md:26 +msgid "Fix media sync sometimes scanning all files again" +msgstr "" + +#: src/changelog/v2.8.md:27 +msgid "Fix removing $ character when importing media files" +msgstr "" + +#: src/changelog/v2.8.md:28 +msgid "Improve automatic card answer timing when audio is played" +msgstr "" + +#: src/changelog/v2.8.md:29 +msgid "Improve rendering of some statistics" +msgstr "" + +#: src/changelog/v2.8.md:30 +msgid "Fix some crashes in the Russian, Vietnamese, and Chinese translations" +msgstr "" + +#: src/changelog/v2.8.md:31 +msgid "Fix crash sending exported apkg by email. NB: Export path can no longer be modified." +msgstr "" + +#: src/changelog/v2.7.md:1 +msgid "Version 2.7 (2016-10-16)" +msgstr "" + +#: src/changelog/v2.7.md:2 +msgid "Add pull-to-sync feature" +msgstr "" + +#: src/changelog/v2.7.md:3 +msgid "Add option to place answer buttons at the top" +msgstr "" + +#: src/changelog/v2.7.md:4 +msgid "Add widget to directly access \"Add note\" screen" +msgstr "" + +#: src/changelog/v2.7.md:5 +msgid "Fix issue with importing whole collections and restoring backups" +msgstr "" + +#: src/changelog/v2.7.md:6 +msgid "Fix deck import failing after the first successful one" +msgstr "" + +#: src/changelog/v2.7.md:7 +msgid "Fix cards in learning queue not being randomized" +msgstr "" + +#: src/changelog/v2.7.md:8 +msgid "Fix crash with fullscreen mode and hidden answer buttons" +msgstr "" + +#: src/changelog/v2.7.md:9 +msgid "Fix rare crash when opening deck options" +msgstr "" + +#: src/changelog/v2.7.md:10 +msgid "Improve support with TalkBack" +msgstr "" + +#: src/changelog/v2.6.md:1 +msgid "Version 2.6.1 (2016-07-08)" +msgstr "" + +#: src/changelog/v2.6.md:2 +msgid "Add card cycling in previewer (similar to desktop client)" +msgstr "" + +#: src/changelog/v2.6.md:3 +msgid "Add option to hide 'minutes left' in reviewer" +msgstr "" + +#: src/changelog/v2.6.md:4 +msgid "Fix language from app setting not always being used" +msgstr "" + +#: src/changelog/v2.6.md:5 +msgid "Fix not being able to play back new sound recording" +msgstr "" + +#: src/changelog/v2.6.md:6 +msgid "Fix potential crash on Android 2.3 (Gingerbread)" +msgstr "" + +#: src/changelog/v2.6.md:7 +msgid "Improved use of horizontal space when resizing large images" +msgstr "" + +#: src/changelog/v2.6.md:8 +msgid "Minor adjustment to black theme colors" +msgstr "" + +#: src/changelog/v2.6.md:10 +msgid "Version 2.6 (2016-06-14)" +msgstr "" + +#: src/changelog/v2.6.md:11 +msgid "Add two new themes (black, plain), selectable in preferences" +msgstr "" + +#: src/changelog/v2.6.md:12 +msgid "Make reviewer app bar icons customizable" +msgstr "" + +#: src/changelog/v2.6.md:13 +msgid "Split \"hide / delete\" menu in reviewer into \"bury\", \"suspend\", \"delete note\"" +msgstr "" + +#: src/changelog/v2.6.md:14 +msgid "Reviewer undo button now removes last stroke when whiteboard in use" +msgstr "" + +#: src/changelog/v2.6.md:15 +msgid "Add menu entry to change TTS language from reviewer" +msgstr "" + +#: src/changelog/v2.6.md:16 +msgid "Add more of the statistics available on the desktop client" +msgstr "" + +#: src/changelog/v2.6.md:17 +msgid "Add \"advanced statistics\" plugin (must be enabled in advanced settings)" +msgstr "" + +#: src/changelog/v2.6.md:18 +msgid "Add setting to configure custom sync server (advanced)" +msgstr "" + +#: src/changelog/v2.6.md:19 +msgid "Fix card templates created in AnkiDroid incorrectly using bold style" +msgstr "" + +#: src/changelog/v2.6.md:20 +msgid "Fix many importing issues (behavior now consistent with the desktop client)" +msgstr "" + +#: src/changelog/v2.6.md:21 +msgid "Fix long-tapping card in browser not always working" +msgstr "" + +#: src/changelog/v2.6.md:22 +msgid "Update sound playback button image" +msgstr "" + +#: src/changelog/v2.6.md:23 +msgid "Reduce size of whiteboard and gesture area for better interoperability with full screen" +msgstr "" + +#: src/changelog/v2.6.md:24 +msgid "Improve error messages with inaccessible collections" +msgstr "" + +#: src/changelog/v2.6.md:25 +msgid "Allow auto-play of HTML media elements (for templates that enable it)" +msgstr "" + +#: src/changelog/v2.6.md:26 +msgid "Significant updates to the content provider and API (for developers; see documentation)" +msgstr "" + +#: src/changelog/v2.6.md:27 +msgid "Many small bug fixes, improvements, theme adjustments, translation updates" +msgstr "" + +#: src/changelog/v2.5.md:1 +msgid "Version 2.5.4 (2015-12-14)" +msgstr "" + +#: src/changelog/v2.5.md:2 +msgid "Fix background color in overflow menu of deck picker" +msgstr "" + +#: src/changelog/v2.5.md:4 +msgid "Version 2.5.3 (2015-12-14)" +msgstr "" + +#: src/changelog/v2.5.md:5 +msgid "Fix floating action button (blue +) interfering with deck list on Android 2.3" +msgstr "" + +#: src/changelog/v2.5.md:6 +msgid "Fix opening apkg files from Gmail" +msgstr "" + +#: src/changelog/v2.5.md:7 +msgid "Fix automatic playback of consecutive videos" +msgstr "" + +#: src/changelog/v2.5.md:8 +msgid "Add a new launch screen" +msgstr "" + +#: src/changelog/v2.5.md:9 +msgid "Improve behaviour surrounding the deck overview screen" +msgstr "" + +#: src/changelog/v2.5.md:10 +msgid "Multiple media files can now be added to one field in the note editor" +msgstr "" + +#: src/changelog/v2.5.md:11 +msgid "Don't include unused media files on export" +msgstr "" + +#: src/changelog/v2.5.md:12 +msgid "Undo behaviour is now consistent with the desktop client (can no longer undo note edits)" +msgstr "" + +#: src/changelog/v2.5.md:13 +msgid "Enhancements to sync canceling" +msgstr "" + +#: src/changelog/v2.5.md:14 +msgid "Minor performance enhancements, crash fixes, and UI tweaks" +msgstr "" + +#: src/changelog/v2.5.md:16 +msgid "Version 2.5.2 (2015-12-04)" +msgstr "" + +#: src/changelog/v2.5.md:17 +msgid "Fix start-up crashes on Samsung devices running Android 4.2" +msgstr "" + +#: src/changelog/v2.5.md:18 +msgid "Fix crash for new users on Android 6.0" +msgstr "" + +#: src/changelog/v2.5.md:19 +msgid "Reverted to old typing method. The new method is now an option which is off by default." +msgstr "" + +#: src/changelog/v2.5.md:20 +msgid "You can now click on the numbers in the right-most part of the deck list to open the deck overview screen" +msgstr "" + +#: src/changelog/v2.5.md:21 +msgid "Various fixes to transition animations and progress bars" +msgstr "" + +#: src/changelog/v2.5.md:22 +msgid "Add option to remove empty cards (previously only possible on desktop)" +msgstr "" + +#: src/changelog/v2.5.md:23 +msgid "Remove: Google Translate filter. In practice, this feature had no effect and is not required" +msgstr "" + +#: src/changelog/v2.5.md:24 +msgid "Remove: Google image search for multimedia card. The image search API has been discontinued by Google and no longer works" +msgstr "" + +#: src/changelog/v2.5.md:26 +msgid "Version 2.5.1 (2015-12-01)" +msgstr "" + +#: src/changelog/v2.5.md:27 +msgid "Fix crash when loading deck list (could not open collection bug)" +msgstr "" + +#: src/changelog/v2.5.md:28 +msgid "Fix visible progress bar showing when answering card" +msgstr "" + +#: src/changelog/v2.5.md:30 +msgid "Version 2.5 (2015-11-30)" +msgstr "" + +#: src/changelog/v2.5.md:31 +msgid "Redesign of user interface to use material design" +msgstr "" + +#: src/changelog/v2.5.md:32 +msgid "Add new dark theme" +msgstr "" + +#: src/changelog/v2.5.md:33 +msgid "Simplify the study process by bypassing deck overview screen" +msgstr "" + +#: src/changelog/v2.5.md:34 +msgid "Add ability to add, edit, delete note types" +msgstr "" + +#: src/changelog/v2.5.md:35 +msgid "Add setting to enable auto-sync and a Tasker intent to trigger sync" +msgstr "" + +#: src/changelog/v2.5.md:36 +msgid "Replace \"instant add\" feature with new API for 3rd party apps to add cards directly to AnkiDroid" +msgstr "" + +#: src/changelog/v2.5.md:37 +msgid "\"Type in the answer\" input box now built into the card html itself" +msgstr "" + +#: src/changelog/v2.5.md:38 +msgid "Make fullscreen-mode immersive and added setting to hide answer buttons when using gestures" +msgstr "" + +#: src/changelog/v2.5.md:39 +msgid "Add css class for customizing card background color when night mode is enabled" +msgstr "" + +#: src/changelog/v2.5.md:40 +msgid "Allow changing media volume from the deck picker" +msgstr "" + +#: src/changelog/v2.5.md:41 +msgid "Add ability to save and view common searches in the card browser" +msgstr "" + +#: src/changelog/v2.5.md:42 +msgid "Browser now shows full question and answer in the results by default" +msgstr "" + +#: src/changelog/v2.5.md:43 +msgid "Only show tags relevant to that deck when doing custom study by tag" +msgstr "" + +#: src/changelog/v2.5.md:44 +msgid "Fix some bugs in the widget" +msgstr "" + +#: src/changelog/v2.5.md:45 +msgid "Remove \"simple interface\"" +msgstr "" + +#: src/changelog/v2.5.md:46 +msgid "Remove support for Android version 2.1 and 2.2 (minimum is now 2.3.3)" +msgstr "" + +#: src/changelog/v2.5.md:47 +msgid "Add support for Android 6 Marshmallow" +msgstr "" + +#: src/changelog/v2.5.md:48 +msgid "Disable write-ahead-logging in sqlite database" +msgstr "" + +#: src/changelog/v2.5.md:49 +msgid "Many other bug fixes and small improvements" +msgstr "" + +#: src/changelog/v2.4.md:1 +msgid "Version 2.4.4 (2015-10-20)" +msgstr "" + +#: src/changelog/v2.4.md:2 +msgid "Fix playback of sound files with apostrophes in file name" +msgstr "" + +#: src/changelog/v2.4.md:3 +msgid "Fix new card siblings not being buried for the same day" +msgstr "" + +#: src/changelog/v2.4.md:4 +msgid "Fix media on cards when using the Hebrew Fix option" +msgstr "" + +#: src/changelog/v2.4.md:5 +msgid "Fix crashes related to \"Relative overdueness\" and make this sort order available on AnkiDroid" +msgstr "" + +#: src/changelog/v2.4.md:6 +msgid "When mixing new and review cards, make their rotation more consistent with desktop" +msgstr "" + +#: src/changelog/v2.4.md:8 +msgid "Version 2.4.3 (2015-04-21)" +msgstr "" + +#: src/changelog/v2.4.md:9 +msgid "Fix \"unknown field\" bug" +msgstr "" + +#: src/changelog/v2.4.md:10 +msgid "Fix crash showing welcome screen on Android 2.3" +msgstr "" + +#: src/changelog/v2.4.md:11 +msgid "Fix crash caused by widget" +msgstr "" + +#: src/changelog/v2.4.md:12 +msgid "Fix rare crash in browser" +msgstr "" + +#: src/changelog/v2.4.md:13 +msgid "Fix a couple of sync issues" +msgstr "" + +#: src/changelog/v2.4.md:14 +msgid "Fix crash starting AnkiDroid on a small number of devices" +msgstr "" + +#: src/changelog/v2.4.md:15 src/changelog/v2.4.md:29 +msgid "Update translations" +msgstr "" + +#: src/changelog/v2.4.md:17 +msgid "Version 2.4.2 (2015-03-18)" +msgstr "" + +#: src/changelog/v2.4.md:18 +msgid "Fix some bugs with cloze templates" +msgstr "" + +#: src/changelog/v2.4.md:19 +msgid "Fix a translation error" +msgstr "" + +#: src/changelog/v2.4.md:21 +msgid "Version 2.4.1 (2015-03-15)" +msgstr "" + +#: src/changelog/v2.4.md:22 +msgid "Fix some bugs with filtered decks" +msgstr "" + +#: src/changelog/v2.4.md:23 +msgid "Improve importing of shared decks" +msgstr "" + +#: src/changelog/v2.4.md:24 +msgid "Open settings if AnkiDroid dir inaccessible" +msgstr "" + +#: src/changelog/v2.4.md:25 +msgid "Fix a bug with zooming" +msgstr "" + +#: src/changelog/v2.4.md:26 +msgid "Fix a bug where old card was still shown in reviewer after changing deck" +msgstr "" + +#: src/changelog/v2.4.md:27 +msgid "Fix some issues with cloze deletion" +msgstr "" + +#: src/changelog/v2.4.md:28 +msgid "Fix various crashes" +msgstr "" + +#: src/changelog/v2.4.md:31 +msgid "Version 2.4 (2015-01-28)" +msgstr "" + +#: src/changelog/v2.4.md:32 +msgid "Move \"preview\" feature to browser" +msgstr "" + +#: src/changelog/v2.4.md:33 +msgid "Add ability to change note type of existing flashcards" +msgstr "" + +#: src/changelog/v2.4.md:34 +msgid "Add ability to view and delete card templates" +msgstr "" + +#: src/changelog/v2.4.md:35 +msgid "Fix TTS for most devices" +msgstr "" + +#: src/changelog/v2.4.md:36 +msgid "Support playback of videos (see supported formats [here](http://developer.android.com/guide/appendix/media-formats.html))" +msgstr "" + +#: src/changelog/v2.4.md:37 +msgid "Improve rendering of second column in browser" +msgstr "" + +#: src/changelog/v2.4.md:38 +msgid "Improve detection of swipe gestures" +msgstr "" + +#: src/changelog/v2.4.md:39 +msgid "Increase number of languages in Glosbe translator" +msgstr "" + +#: src/changelog/v2.4.md:40 +msgid "Add support for Chromebooks" +msgstr "" + +#: src/changelog/v2.4.md:41 +msgid "New crash report system" +msgstr "" + +#: src/changelog/v2.4.md:42 +msgid "Bug fixes" +msgstr "" + +#: src/changelog/v2.3.md:1 +msgid "Version 2.3.2 (2014-11-06)" +msgstr "" + +#: src/changelog/v2.3.md:2 +msgid "Bug fixes: Sync, TTS, Remote images, Advanced editor, Export" +msgstr "" + +#: src/changelog/v2.3.md:3 +msgid "Note: This is the last version of AnkiDroid supported by AnkiWeb. Previous versions will not sync." +msgstr "" + +#: src/changelog/v2.3.md:5 +msgid "Version 2.3 (2014-10-27)" +msgstr "" + +#: src/changelog/v2.3.md:6 +msgid "Add new user manual" +msgstr "" + +#: src/changelog/v2.3.md:7 +msgid "Make statistics identical to Anki Desktop" +msgstr "" + +#: src/changelog/v2.3.md:8 +msgid "Fixes to media sync" +msgstr "" + +#: src/changelog/v2.3.md:9 +msgid "Fix bug where images were not showing" +msgstr "" + +#: src/changelog/v2.3.md:10 +msgid "Change layout of note editor" +msgstr "" + +#: src/changelog/v2.3.md:11 +msgid "Add new disable whiteboard option to reviewer and update icons" +msgstr "" + +#: src/changelog/v2.3.md:12 +msgid "Add full support for APKG export and import" +msgstr "" + +#: src/changelog/v2.3.md:13 +msgid "Add feature to email exported APKG" +msgstr "" + +#: src/changelog/v2.3.md:14 +msgid "Increase default number of backups and use APKG" +msgstr "" + +#: src/changelog/v2.3.md:15 +msgid "Make preview card accessible from card browser" +msgstr "" + +#: src/changelog/v2.3.md:16 +msgid "Make shared decks download with Android browser" +msgstr "" + +#: src/changelog/v2.3.md:17 +msgid "Add reset and reschedule feature in note editor" +msgstr "" + +#: src/changelog/v2.3.md:18 +msgid "Add a new notification system and icon" +msgstr "" + +#: src/changelog/v2.3.md:19 +msgid "Replace tutorial deck with new welcome screen" +msgstr "" + +#: src/changelog/v2.3.md:20 +msgid "Disable opening navigation drawer from reviewer when swipe is used" +msgstr "" + +#: src/changelog/v2.3.md:21 +msgid "Improve audio recording quality" +msgstr "" + +#: src/changelog/v2.3.md:22 +msgid "Support sticky fields when enabled in Anki Desktop" +msgstr "" + +#: src/changelog/v2.3.md:23 +msgid "Many other bug fixes" +msgstr "" + +#: src/changelog/v2.2.md:1 +msgid "Version 2.2.3 (2014-08-04)" +msgstr "" + +#: src/changelog/v2.2.md:2 +msgid "New media sync protocol" +msgstr "" + +#: src/changelog/v2.2.md:3 +msgid "Fix 2 bugs for opening links and resuming the app" +msgstr "" + +#: src/changelog/v2.2.md:5 +msgid "Version 2.2 (2014-07-21)" +msgstr "" + +#: src/changelog/v2.2.md:6 +msgid "Redesign layout" +msgstr "" + +#: src/changelog/v2.2.md:7 +msgid "Add pictures and sounds to flashcards (experimental)" +msgstr "" + +#: src/changelog/v2.2.md:8 +msgid "Make second column in card browser configurable" +msgstr "" + +#: src/changelog/v2.2.md:9 +msgid "Make images on flashcards zoomable" +msgstr "" + +#: src/changelog/v2.2.md:10 +msgid "Improve preview feature and access via action bar" +msgstr "" + +#: src/changelog/v2.2.md:11 +msgid "Simplify menus and settings" +msgstr "" + +#: src/changelog/v2.2.md:12 +msgid "Make slow searches in card browser cancellable" +msgstr "" + +#: src/changelog/v2.2.md:13 +msgid "Improve adding/removing tags" +msgstr "" + +#: src/changelog/v2.2.md:14 +msgid "Fix \"type in the answer\" and cloze deletion features" +msgstr "" + +#: src/changelog/v2.2.md:15 +msgid "Fix whiteboard feature" +msgstr "" + +#: src/changelog/v2.2.md:16 +msgid "Restore backups from within the app" +msgstr "" + +#: src/changelog/v2.2.md:17 +msgid "Make volume duck on any background music when sounds played" +msgstr "" + +#: src/changelog/v2.2.md:18 +msgid "Make playing of sounds consistent with Desktop version" +msgstr "" + +#: src/changelog/v2.2.md:19 +msgid "Remove animations feature due to being buggy" +msgstr "" + +#: src/changelog/v2.2.md:20 +msgid "Improve speed of showing cards" +msgstr "" + +#: src/changelog/v2.2.md:21 +msgid "Remove duplicate check dialog when adding new flashcards" +msgstr "" + +#: src/changelog/v2.2.md:22 +msgid "Remove swap button when adding or editing flashcards" +msgstr "" + +#: src/changelog/v2.2.md:23 +msgid "Remove kanji info feature (will become optional plugin in the future)" +msgstr "" + +#: src/changelog/v2.2.md:24 +msgid "Make minimum Android version 2.1" +msgstr "" + +#: src/changelog/v2.2.md:25 +msgid "Fix lots of bugs" +msgstr "" + +#: src/changelog/v2.1.md:1 +msgid "Version 2.1.3 (2014-04-05)" +msgstr "" + +#: src/changelog/v2.1.md:2 +msgid "Create new notes in correct deck" +msgstr "" + +#: src/changelog/v2.1.md:3 +msgid "TTS fixes" +msgstr "" + +#: src/changelog/v2.1.md:5 +msgid "Version 2.1 (2014-03-27)" +msgstr "" + +#: src/changelog/v2.1.md:6 +msgid "Lots of Bug Fixes" +msgstr "" + +#: src/changelog/v2.1.md:7 +msgid "New custom study option with improved tag selection" +msgstr "" + +#: src/changelog/v2.1.md:8 +msgid "New preview card feature in note editor (experimental)" +msgstr "" + +#: src/changelog/v2.1.md:9 +msgid "New override font preference in addition to default font" +msgstr "" + +#: src/changelog/v2.1.md:10 +msgid "New \"Kanji Info\" feature (enabled in preferences->reviewing->Kanji Info)" +msgstr "" + +#: src/changelog/v2.1.md:11 +msgid "Improve Aedict integration" +msgstr "" + +#: src/changelog/v2.1.md:12 +msgid "Support for Samsung Multi-Window" +msgstr "" + +#: src/changelog/v2.1.md:13 +msgid "Fix Some TTS Issues" +msgstr "" + +#: src/changelog/v2.1.md:14 +msgid "Updated Translations" +msgstr "" + +#: src/changelog/v2.1.md:15 +msgid "Remove unused media check when deleting decks" +msgstr "" + +#: src/changelog/v2.1.md:16 +msgid "Significantly increase speed for reducing filtered decks" +msgstr "" + +#: src/changelog/v2.1.md:17 +msgid "Remove upgrade wizard" +msgstr "" + +#: src/changelog/v2.0.md:1 +msgid "Version 2.0.4 (2014-02-03)" +msgstr "" + +#: src/changelog/v2.0.md:2 +msgid "Fix issue with typing answers" +msgstr "" + +#: src/changelog/v2.0.md:3 +msgid "Default font now overrides card font" +msgstr "" + +#: src/changelog/v2.0.md:4 +msgid "Fixed audio playback image being covered by text on Android 2.3" +msgstr "" + +#: src/changelog/v2.0.md:5 +msgid "Fixed reviewer crash when language set to Romanian" +msgstr "" + +#: src/changelog/v2.0.md:6 +msgid "Translation fixes" +msgstr "" + +#: src/changelog/v2.0.md:8 +msgid "Version 2.0.2 (2013-12-15)" +msgstr "" + +#: src/changelog/v2.0.md:9 +msgid "Fixed lots of crashes" +msgstr "" + +#: src/changelog/v2.0.md:10 +msgid "Tablet UI fixes" +msgstr "" + +#: src/changelog/v2.0.md:11 +msgid "Fixed new card ordering issues" +msgstr "" + +#: src/changelog/v2.0.md:12 +msgid "Card appearance now matches desktop Anki. (Centering cards is off by default but can be re-enabled)" +msgstr "" + +#: src/changelog/v2.0.md:13 +msgid "Option groups can now be changed in AnkiDroid" +msgstr "" + +#: src/changelog/v2.0.md:14 +msgid "Clear error message when using a bad template" +msgstr "" + +#: src/changelog/v2.0.md:15 +msgid "Fixed timeboxing notifications" +msgstr "" + +#: src/changelog/v2.0.md:16 +msgid "Properly scale images" +msgstr "" + +#: src/changelog/v2.0.md:17 +msgid "Better custom font handling" +msgstr "" + +#: src/changelog/v2.0.md:18 +msgid "More settings (next day starts at, timeboxing value, etc.)" +msgstr "" + +#: src/changelog/v2.0.md:19 +msgid "Changing AnkiDroid interface language now works." +msgstr "" + +#: src/changelog/v2.0.md:20 +msgid "Fixed import/shared deck download issues (\"not a valid apkg file\")" +msgstr "" + +#: src/changelog/v2.0.md:21 +msgid "Fixed invisible text on Motorola devices" +msgstr "" + +#: src/changelog/v2.0.md:22 +msgid "Focus on answer when revealed" +msgstr "" + +#: src/changelog/v2.0.md:23 +msgid "Filtered decks are now blue in deck list" +msgstr "" + +#: src/changelog/v2.0.md:24 +msgid "Removed unused circle button in note editor" +msgstr "" + +#: src/changelog/v2.0.md:26 +msgid "Version 2.0.1 (2013-02-06)" +msgstr "" + +#: src/changelog/v2.0.md:27 +msgid "Upgrade wizard" +msgstr "" + +#: src/changelog/v2.0.md:28 +msgid "Fix importing apkgs" +msgstr "" + +#: src/changelog/v2.0.md:29 +msgid "Fix media syncing" +msgstr "" + +#: src/changelog/v2.0.md:31 +msgid "Version 2.0 (2013-01-03)" +msgstr "" + +#: src/changelog/v2.0.md:32 +msgid "complete revision" +msgstr "" + +#: src/changelog/v2.0.md:33 +msgid "libanki2.0 scheduling" +msgstr "" + +#: src/changelog/v2.0.md:34 +msgid "new learning mode" +msgstr "" + +#: src/changelog/v2.0.md:35 +msgid "new layout" +msgstr "" + +#: src/changelog/v2.0.md:36 +msgid "merge syncing possible now" +msgstr "" + +#: src/changelog/v2.0.md:37 +msgid "better statistics" +msgstr "" + +#: src/changelog/v2.0.md:38 +msgid "decks are now saved in a single collection" +msgstr "" + +#: src/changelog/v2.0.md:39 +msgid "options are shareable now" +msgstr "" + +#: src/changelog/v2.0.md:40 +msgid "tablet layout" +msgstr "" + +#: src/changelog/v2.0.md:41 +msgid "tons of performance improvements" +msgstr "" + +#: src/changelog/v2.0.md:42 +msgid "card import function" +msgstr "" + +#: src/changelog/v2.0.md:43 +msgid "collection can be saved on internal memory" +msgstr "" + +#: src/changelog/v0.1-to-1.1.3.md:2 +msgid "AnkiDroid has continuously evolved collectively as an open source project, with the first version released to the Google Market on [June 28 2009](http://nicolas-raoul.blogspot.jp/2009/06/just-published-ankidroid-on-market.html). " +msgstr "" + +#: src/changelog/v0.1-to-1.1.3.md:4 +msgid "Version 1.1.3 was the last 1.x version (released on 26th June 2012), before the incompatible AnkiDroid v2.0 was released, essentially rewritten from scratch to be compatible with the new Anki Desktop v2.0." +msgstr "" + diff --git a/po/ru.po b/po/ru.po new file mode 100644 index 0000000..7dc8a52 --- /dev/null +++ b/po/ru.po @@ -0,0 +1,6445 @@ +msgid "" +msgstr "" +"Project-Id-Version: ankidroiddocs\n" +"POT-Creation-Date: 2024-02-01T17:14:41Z\n" +"PO-Revision-Date: 2024-02-02 08:38\n" +"Last-Translator: \n" +"Language-Team: Russian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" +"X-Crowdin-Project: ankidroiddocs\n" +"X-Crowdin-Project-ID: 645072\n" +"X-Crowdin-Language: ru\n" +"X-Crowdin-File: messages.pot\n" +"X-Crowdin-File-ID: 2\n" + +#: src/SUMMARY.md:1 +msgid "Summary" +msgstr "" + +#: src/SUMMARY.md:3 src/intro.md:1 src/intro.md:1 +msgid "Introduction" +msgstr "" + +#: src/SUMMARY.md:4 src/getting-started.md:1 +msgid "Getting started" +msgstr "" + +#: src/SUMMARY.md:6 src/deck-picker.md:1 +msgid "The Deck List" +msgstr "" + +#: src/SUMMARY.md:8 src/drawer.md:1 +msgid "Navigation Drawer" +msgstr "" + +#: src/SUMMARY.md:10 src/deck-overview.md:1 +msgid "Deck Overview Screen" +msgstr "" + +#: src/SUMMARY.md:12 src/reviewer.md:1 +msgid "Study Screen" +msgstr "" + +#: src/SUMMARY.md:14 src/adding-notes.md:1 +msgid "Add Note Screen" +msgstr "" + +#: src/SUMMARY.md:16 src/editing-notes.md:1 +msgid "Edit Note Screen" +msgstr "" + +#: src/SUMMARY.md:18 src/browser.md:1 +msgid "Finding/Searching/Browsing" +msgstr "" + +#: src/SUMMARY.md:20 src/filtered-deck.md:1 +msgid "Filtered Decks" +msgstr "" + +#: src/SUMMARY.md:22 src/importing/importing-anki-files.md:1 +msgid "Importing Anki Files" +msgstr "" + +#: src/SUMMARY.md:23 src/importing/importing-anki-databases.md:1 +msgid "Importing Anki Databases (.anki2)" +msgstr "" + +#: src/SUMMARY.md:25 src/exporting.md:1 +msgid "Exporting Anki Files" +msgstr "" + +#: src/SUMMARY.md:27 src/backups.md:1 +msgid "Automatic Backups" +msgstr "" + +#: src/SUMMARY.md:29 src/settings.md:1 +msgid "Preferences" +msgstr "" + +#: src/SUMMARY.md:31 src/gestures.md:1 +msgid "Gestures" +msgstr "" + +#: src/SUMMARY.md:33 src/note-formatting-toolbar.md:1 +msgid "Note Formatting Toolbar" +msgstr "" + +#: src/SUMMARY.md:35 src/keyboard-shortcuts.md:1 +msgid "Keyboard Shortcuts" +msgstr "" + +#: src/SUMMARY.md:37 src/rtl.md:1 +msgid "Using Right-To-Left Languages with AnkiDroid" +msgstr "" + +#: src/SUMMARY.md:39 src/anki-desktop.md:1 +msgid "Using Anki Desktop with AnkiDroid" +msgstr "" + +#: src/SUMMARY.md:41 src/ankiweb-conflicts.md:1 +msgid "Dealing with merge conflicts on AnkiWeb" +msgstr "" + +#: src/SUMMARY.md:43 src/advanced-features/intro.md:1 +msgid "Advanced Features" +msgstr "" + +#: src/SUMMARY.md:44 src/advanced-features/mathjax.md:1 +msgid "MathJax Support" +msgstr "" + +#: src/SUMMARY.md:45 src/advanced-features/reverse-cards.md:1 +msgid "Reverse Cards" +msgstr "" + +#: src/SUMMARY.md:46 src/advanced-features/custom-fonts.md:1 +msgid "Custom Fonts" +msgstr "" + +#: src/SUMMARY.md:47 src/advanced-features/customizing-card-layout.md:1 +msgid "Custom Card Layout" +msgstr "" + +#: src/SUMMARY.md:48 src/advanced-features/type-in-answer.md:1 +msgid "Type in the answer feature" +msgstr "" + +#: src/SUMMARY.md:49 src/gestures.md:146 +#: src/advanced-features/advanced-statistics.md:1 +msgid "Advanced Statistics" +msgstr "" + +#: src/SUMMARY.md:50 src/advanced-features/reminders.md:1 +msgid "Reminders" +msgstr "" + +#: src/SUMMARY.md:51 src/advanced-features/set-language-hint.md:1 +msgid "Automatic Language Selection" +msgstr "" + +#: src/SUMMARY.md:54 +msgid "Help & Supports" +msgstr "" + +#: src/SUMMARY.md:55 src/beta-testing.md:1 +msgid "Beta testing" +msgstr "" + +#: src/SUMMARY.md:56 src/help.md:33 src/contributing.md:1 +msgid "Contributing to AnkiDroid" +msgstr "" + +#: src/SUMMARY.md:57 +msgid "Changelog" +msgstr "" + +#: src/SUMMARY.md:58 +msgid "Version 2.15" +msgstr "" + +#: src/SUMMARY.md:59 +msgid "Version 2.14" +msgstr "" + +#: src/SUMMARY.md:60 +msgid "Version 2.13" +msgstr "" + +#: src/SUMMARY.md:61 +msgid "Version 2.12" +msgstr "" + +#: src/SUMMARY.md:62 +msgid "Version 2.11" +msgstr "" + +#: src/SUMMARY.md:63 +msgid "Version 2.10" +msgstr "" + +#: src/SUMMARY.md:64 +msgid "Version 2.9" +msgstr "" + +#: src/SUMMARY.md:65 +msgid "Version 2.8" +msgstr "" + +#: src/SUMMARY.md:66 +msgid "Version 2.7" +msgstr "" + +#: src/SUMMARY.md:67 +msgid "Version 2.6" +msgstr "" + +#: src/SUMMARY.md:68 +msgid "Version 2.5" +msgstr "" + +#: src/SUMMARY.md:69 +msgid "Version 2.4" +msgstr "" + +#: src/SUMMARY.md:70 +msgid "Version 2.3" +msgstr "" + +#: src/SUMMARY.md:71 +msgid "Version 2.2" +msgstr "" + +#: src/SUMMARY.md:72 +msgid "Version 2.1" +msgstr "" + +#: src/SUMMARY.md:73 +msgid "Version 2.0" +msgstr "" + +#: src/SUMMARY.md:74 src/changelog/v0.1-to-1.1.3.md:1 +msgid "Version 0.1 to 1.1.3" +msgstr "" + +#: src/intro.md:3 src/intro.md:3 +msgid "Thank you for using AnkiDroid, the Android client for the popular [Anki](http://ankisrs.net) spaced repetition system. " +msgstr "" + +#: src/intro.md:5 src/intro.md:5 +msgid "Anki is spaced repetition technique which is simple but highly effective. It helps you memorize things by automatically repeating them across increasing intervals based on your responses with no need for you to keep track of what to study or when to study it. You create notes (or download shared decks) with content you need to memorize, and the scheduler will make sure you see the content when you need to." +msgstr "" + +#: src/intro.md:7 src/intro.md:7 +msgid "AnkiDroid is intended to be used in conjunction with Anki on your computer. While it is possible to function without it, some tasks are either only possible with, or a lot more efficient with Anki Desktop. Furthermore, it is **strongly recommended** to at least read [`Key Concepts`](https://docs.ankiweb.net/getting-started.html#key-concepts) section of the main Anki manual to understand the terminology used here." +msgstr "" + +#: src/intro.md:9 src/intro.md:9 +msgid "If this manual doesn't contain what you are looking for, please check the [AnkiDroid Wiki](https://github.com/ankidroid/Anki-Android/wiki) for a list of changes, instructions for submitting bug reports and feature requests, a list of frequently asked questions, and much more." +msgstr "" + +#: src/getting-started.md:2 +msgid "To start using AnkiDroid, we need to add some cards to study. From the main screen, tapping the big blue plus button will allow you to either add a new **note** (i.e. create new flashcards), download shared decks (decks that other people have created and shared online), or create new empty decks." +msgstr "" + +#: src/getting-started.md:4 +msgid "Please watch this 5 minute [tutorial video](https://www.youtube.com/watch?v=F2K1gOSdIZA), which gives an introduction to adding, downloading, and studying cards in AnkiDroid. More detailed information can be found in the sections below." +msgstr "" + +#: src/getting-started.md:6 +msgid "If you are an existing user of Anki Desktop wishing to import your decks from the computer, you might like to skip straight to the [using AnkiDroid with Anki Desktop](anki-desktop.md#using-anki-desktop-with-ankidroid) section." +msgstr "" + +#: src/deck-picker.md:3 +msgid "[Add button](#add-button)" +msgstr "" + +#: src/deck-picker.md:4 +msgid "[Add](#add)" +msgstr "" + +#: src/deck-picker.md:5 +msgid "[Get shared decks](#get-shared-decks)" +msgstr "" + +#: src/deck-picker.md:6 +msgid "[Create deck](#create-deck)" +msgstr "" + +#: src/deck-picker.md:7 +msgid "[App Bar](#app-bar)" +msgstr "" + +#: src/deck-picker.md:8 +msgid "[Navigation menu button](#navigation-menu-button)" +msgstr "" + +#: src/deck-picker.md:9 +msgid "[Sync button](#sync-button)" +msgstr "" + +#: src/deck-picker.md:10 +msgid "[Overflow menu button](#overflow-menu-button)" +msgstr "" + +#: src/deck-picker.md:11 +msgid "[Studying a Deck](#studying-a-deck)" +msgstr "" + +#: src/deck-picker.md:12 +msgid "[Other Deck Actions](#other-deck-actions)" +msgstr "" + +#: src/deck-picker.md:13 +msgid "[Rename deck](#rename-deck)" +msgstr "" + +#: src/deck-picker.md:14 +msgid "[Deck options](#deck-options)" +msgstr "" + +#: src/deck-picker.md:15 +msgid "[Custom study](#custom-study)" +msgstr "" + +#: src/deck-picker.md:16 +msgid "[Delete deck](#delete-deck)" +msgstr "" + +#: src/deck-picker.md:17 +msgid "[Export deck](#export-deck)" +msgstr "" + +#: src/deck-picker.md:18 src/deck-overview.md:11 +msgid "[Unbury](#unbury)" +msgstr "" + +#: src/deck-picker.md:19 +msgid "[Rebuild / Empty](#rebuild--empty)" +msgstr "" + +#: src/deck-picker.md:20 +msgid "[Clickable areas on the decks](#clickable-areas-on-the-decks)" +msgstr "" + +#: src/deck-picker.md:21 +msgid "[Deck expander](#deck-expander)" +msgstr "" + +#: src/deck-picker.md:22 +msgid "[Deck name](#deck-name)" +msgstr "" + +#: src/deck-picker.md:23 +msgid "[Count buttons](#count-buttons)" +msgstr "" + +#: src/deck-picker.md:24 +msgid "[Advanced Actions](#advanced-actions)" +msgstr "" + +#: src/deck-picker.md:25 src/gestures.md:11 +msgid "[Undo](#undo)" +msgstr "" + +#: src/deck-picker.md:26 +msgid "[Check database](#check-database)" +msgstr "" + +#: src/deck-picker.md:27 +msgid "[Check media](#check-media)" +msgstr "" + +#: src/deck-picker.md:28 +msgid "[Empty cards](#empty-cards)" +msgstr "" + +#: src/deck-picker.md:29 +msgid "[Restore from backup](#restore-from-backup)" +msgstr "" + +#: src/deck-picker.md:30 +msgid "[Manage note types](#manage-note-types)" +msgstr "" + +#: src/deck-picker.md:31 +msgid "[Import](#import)" +msgstr "" + +#: src/deck-picker.md:32 +msgid "[Export collection](#export-collection)" +msgstr "" + +#: src/deck-picker.md:33 +msgid "[Deck Counts](#deck-counts)" +msgstr "" + +#: src/deck-picker.md:35 +msgid "__Note:__ _This section onwards assumes you understand what [decks and cards](https://docs.ankiweb.net/getting-started.html#key-concepts) are_" +msgstr "" + +#: src/deck-picker.md:37 +msgid "The deck list is the screen you see when you start AnkiDroid. It displays a list of the decks which contain all of your flashcards, and allows you to perform various actions:" +msgstr "" + +#: src/deck-picker.md:39 +msgid "![decks.png](img/1-decks.png)" +msgstr "" + +#: src/deck-picker.md:41 +msgid "Add button" +msgstr "" + +#: src/deck-picker.md:42 +msgid "The big blue + button in the bottom right corner is used to add new material to AnkiDroid. Pressing it expands to give the following three options, which are also described in the [tutorial video](https://www.youtube.com/watch?v=F2K1gOSdIZA)." +msgstr "" + +#: src/deck-picker.md:44 +msgid "Add" +msgstr "" + +#: src/deck-picker.md:45 +msgid "Choose this option if you want to create your own flashcards (notes) with AnkiDroid. \"Notes\" and \"cards\" have specific meanings in Anki, which are [explained in the main Anki manual](https://docs.ankiweb.net/getting-started.html#key-concepts). Please see the tutorial video for a quick introduction to adding notes, or refer to the [adding notes](adding-notes.md#add-note-screen) section below for more detailed information." +msgstr "" + +#: src/deck-picker.md:47 +msgid "Get shared decks" +msgstr "" + +#: src/deck-picker.md:48 +msgid "To download a deck of cards from the internet that another user has contributed:" +msgstr "" + +#: src/deck-picker.md:49 +msgid "Ensure you're connected to the internet." +msgstr "" + +#: src/deck-picker.md:50 +msgid "Tap + and then **Get shared decks**. AnkiWeb will open." +msgstr "" + +#: src/deck-picker.md:51 +msgid "Select a category, or type in a search." +msgstr "" + +#: src/deck-picker.md:52 +msgid "Tap **Info** on a deck you'd like to study." +msgstr "" + +#: src/deck-picker.md:53 +msgid "Scroll down and tap **Download**." +msgstr "" + +#: src/deck-picker.md:54 +msgid "You browser will download the file and display a `download complete` notification. Tap this button." +msgstr "" + +#: src/deck-picker.md:56 +msgid "AnkiDroid will appear, and show a confirmation dialog. Tap the **Add** button." +msgstr "" + +#: src/deck-picker.md:57 +msgid "When the import completes, your deck should be ready to study." +msgstr "" + +#: src/deck-picker.md:59 +msgid "Create deck" +msgstr "" + +#: src/deck-picker.md:60 +msgid "To create a new empty deck:" +msgstr "" + +#: src/deck-picker.md:61 +msgid "Tap the **+** button and choose `Create deck`" +msgstr "" + +#: src/deck-picker.md:62 +msgid "Choose a name for the deck, for example `New Japanese`" +msgstr "" + +#: src/deck-picker.md:63 +msgid "Add cards to it following the `Add` instructions above" +msgstr "" + +#: src/deck-picker.md:65 src/reviewer.md:16 +msgid "App Bar" +msgstr "" + +#: src/deck-picker.md:66 +msgid "At the top of each screen in AnkiDroid is the App Bar, with buttons for performing various actions. The following actions are available from the app bar in the deck list:" +msgstr "" + +#: src/deck-picker.md:69 +msgid "Navigation menu button" +msgstr "" + +#: src/deck-picker.md:70 +msgid "Tapping the icon on the far left will show the [left navigation menu](drawer.md#navigation-drawer) for quickly navigating between the main parts of the app." +msgstr "" + +#: src/deck-picker.md:72 +msgid "Sync button" +msgstr "" + +#: src/deck-picker.md:73 +msgid "The circular button with arrows on the right is for synchronizing your cards with the cloud, as described in the [adding decks from cloud](anki-desktop.md#using-anki-desktop-with-ankidroid) section." +msgstr "" + +#: src/deck-picker.md:75 +msgid "Overflow menu button" +msgstr "" + +#: src/deck-picker.md:76 +msgid "On the far right is the overflow menu which contains less commonly used actions. These actions are described further below." +msgstr "" + +#: src/deck-picker.md:78 +msgid "**Hint:** long tapping on a button in the app bar anywhere in the app will display a textual hint describing what the button does!" +msgstr "" + +#: src/deck-picker.md:80 +msgid "Studying a Deck" +msgstr "" + +#: src/deck-picker.md:81 +msgid "To study the cards in a deck, simply tap on the deck name (or the \"STUDY\" button on a 10\" tablet), and AnkiDroid will switch to study mode. " +msgstr "" + +#: src/deck-picker.md:83 +msgid "Note that the currently selected deck is highlighted with a grey background, and if you have any [filtered decks](filtered-deck.md#filtered-decks) they will be highlighted using a blue font. Filtered decks are discussed elsewhere in the manual." +msgstr "" + +#: src/deck-picker.md:85 +msgid "Other Deck Actions" +msgstr "" + +#: src/deck-picker.md:86 +msgid "Long tapping on a deck will show a list of other actions available to perform on that deck:" +msgstr "" + +#: src/deck-picker.md:88 +msgid "Rename deck" +msgstr "" + +#: src/deck-picker.md:89 +msgid "Use this option to rename a deck" +msgstr "" + +#: src/deck-picker.md:91 src/reviewer.md:46 +msgid "Deck options" +msgstr "" + +#: src/deck-picker.md:92 +msgid "Tapping on deck options allows you to configure various deck specific study options. Please see the [desktop documentation](https://docs.ankiweb.net/deck-options.html) for more information about these study options." +msgstr "" + +#: src/deck-picker.md:95 +msgid "Custom study" +msgstr "" + +#: src/deck-picker.md:96 +msgid "Allows you to choose from some convenient presets for studying outside of your normal schedule, for example increasing the study limit for the day. See the section on [filtered decks](filtered-deck.md#filtered-decks) for more detailed information." +msgstr "" + +#: src/deck-picker.md:98 +msgid "Delete deck" +msgstr "" + +#: src/deck-picker.md:99 +msgid "Use this option to delete a deck (note: this action is not reversible, although you can [restore from a backup](backups.md#automatic-backups)" +msgstr "" + +#: src/deck-picker.md:101 +msgid "Export deck" +msgstr "" + +#: src/deck-picker.md:102 +msgid "This option can be used to share a deck with other users. See the [exporting decks](exporting.md#exporting-anki-files) section for more information." +msgstr "" + +#: src/deck-picker.md:104 src/deck-overview.md:40 +msgid "Unbury" +msgstr "" + +#: src/deck-picker.md:105 src/deck-overview.md:41 +msgid "This option is only visible when the selected deck has cards that have been manually or automatically buried." +msgstr "" + +#: src/deck-picker.md:107 +msgid "Rebuild / Empty" +msgstr "" + +#: src/deck-picker.md:108 +msgid "If the selected deck is a [filtered decks](filtered-deck.md#filtered-decks) then you also have the option to rebuild or empty the cards in it." +msgstr "" + +#: src/deck-picker.md:111 +msgid "Clickable areas on the decks" +msgstr "" + +#: src/deck-picker.md:112 +msgid "Each deck in the list has three clickable areas:" +msgstr "" + +#: src/deck-picker.md:114 +msgid "Deck expander" +msgstr "" + +#: src/deck-picker.md:115 +msgid "If you are using [subdecks](https://docs.ankiweb.net/getting-started.html#decks), then a deck expander button may appear on the far left of the deck, which can be used to show / hide the subdecks. A ▶ icon means the deck has hidden subdecks which can be shown, a ▼ icon means the deck has visible subdecks that can be hidden, and no icon means that the deck has no subdecks. " +msgstr "" + +#: src/deck-picker.md:117 +msgid "**Note:** subdecks can be created by using the naming convention `PARENT::CHILD`." +msgstr "" + +#: src/deck-picker.md:119 +msgid "Deck name" +msgstr "" + +#: src/deck-picker.md:120 +msgid "This is the main clickable area, which will take you to the study screen if there are cards available to review." +msgstr "" + +#: src/deck-picker.md:122 +msgid "Count buttons" +msgstr "" + +#: src/deck-picker.md:123 +msgid "The count buttons on the far right of each deck act as a separate clickable area that takes you to the deck overview instead of the study screen. This can be useful if you want to quickly view the number of cards available in the deck." +msgstr "" + +#: src/deck-picker.md:125 +msgid "Advanced Actions" +msgstr "" + +#: src/deck-picker.md:126 +msgid "Some additional actions are located in the overflow menu for less common tasks, which are summarized below:" +msgstr "" + +#: src/deck-picker.md:128 src/reviewer.md:19 src/gestures.md:88 +#: src/keyboard-shortcuts.md:28 +msgid "Undo" +msgstr "" + +#: src/deck-picker.md:129 +msgid "After reviewing the last card in a study session, you can undo it from here." +msgstr "" + +#: src/deck-picker.md:131 +msgid "Check database" +msgstr "" + +#: src/deck-picker.md:132 +msgid "This can automatically fix a lot of problems with your database, and will also purge any unused tags. If you experience any problems with your collection, this is the first action you should try. " +msgstr "" + +#: src/deck-picker.md:134 +msgid "**NOTE:** Under some circumstances, check database will move cards to a deck named _!Recovered Cards_. If this occurs, please move the cards to an appropriate deck via the [card browser](browser.md#findingsearchingbrowsing), and delete _!Recovered Cards_ when it is empty." +msgstr "" + +#: src/deck-picker.md:136 +msgid "Check media" +msgstr "" + +#: src/deck-picker.md:137 +msgid "Try to run this if you experience any issues with media syncing." +msgstr "" + +#: src/deck-picker.md:139 +msgid "Empty cards" +msgstr "" + +#: src/deck-picker.md:140 +msgid "Remove any empty cards from your collection. See the [desktop documentation](https://docs.ankiweb.net/templates/generation.html#card-generation--deletion) for more." +msgstr "" + +#: src/deck-picker.md:142 +msgid "Restore from backup" +msgstr "" + +#: src/deck-picker.md:143 +msgid "Allows you to restore from one of AnkiDroid's [automatic backups](backups.md#automatic-backups)" +msgstr "" + +#: src/deck-picker.md:145 +msgid "Manage note types" +msgstr "" + +#: src/deck-picker.md:146 +msgid "Allows you to add, edit, and delete note types. See the [customizing card layout](advanced-features/customizing-card-layout.md) section for more help with this advanced feature.Keyboard Shortcuts" +msgstr "" + +#: src/deck-picker.md:148 +msgid "Import" +msgstr "" + +#: src/deck-picker.md:149 +msgid "Import a .apkg anki file containing a deck. See the [importing](importing/importing-anki-files.md) section for more." +msgstr "" + +#: src/deck-picker.md:151 +msgid "Export collection" +msgstr "" + +#: src/deck-picker.md:152 +msgid "Export entire collection as a collection.apkg file. See the [exporting](exporting.md) section for more." +msgstr "" + +#: src/deck-picker.md:154 +msgid "Deck Counts" +msgstr "" + +#: src/deck-picker.md:155 +msgid "Next to each deck, three numbers are displayed. The left, blue number, corresponds to how many new cards you have to learn today. Anki will introduce 20 new cards a day by default, and you can customize this number if you'd like. The red number in the middle is for the cards due to be studied today which are currently in the learning phase, and the green number is the cards which are due for review (i.e. cards which have already graduated from the learning phase). On a deck you've never studied before, these numbers will both be zero." +msgstr "" + +#: src/deck-picker.md:157 +msgid "As explained above, tapping on the counts will take you to the deck overview screen." +msgstr "" + +#: src/drawer.md:3 +msgid "![navigation_drawer.png](img/2-navigation_drawer.png)" +msgstr "" + +#: src/drawer.md:5 +msgid "The navigation drawer can be opened from most places in the application by pressing the left menu icon, or alternatively swiping outwards from anywhere on the far left side of the screen. It is used for quickly navigating between different parts of the application. You can switch to the following screens:" +msgstr "" + +#: src/drawer.md:9 +msgid "Decks" +msgstr "" + +#: src/drawer.md:10 +msgid "Takes you to the top level of the app where the list of cards are shown ([more info here](deck-picker.md))" +msgstr "" + +#: src/drawer.md:12 src/keyboard-shortcuts.md:8 src/keyboard-shortcuts.md:51 +msgid "Card Browser" +msgstr "" + +#: src/drawer.md:13 +msgid "Shows a list of all your cards ([more info here](browser.md))" +msgstr "" + +#: src/drawer.md:15 +msgid "Statistics" +msgstr "" + +#: src/drawer.md:16 +msgid "Helps you track your study progress ([more info in Anki manual](https://docs.ankiweb.net/stats.html#statistics) and [here](advanced-features/advanced-statistics.md))" +msgstr "" + +#: src/drawer.md:18 +msgid "Night mode" +msgstr "" + +#: src/drawer.md:19 +msgid "This switches the app to a dark theme which many users find is less straining on the eyes, particularly when reviewing in the dark. See the " +msgstr "" + +#: src/drawer.md:19 +msgid "wiki" +msgstr "" + +#: src/drawer.md:19 +msgid " for instructions on how to customize the card background and font color used in night mode." +msgstr "" + +#: src/drawer.md:21 +msgid "Settings" +msgstr "" + +#: src/drawer.md:22 +msgid "Allows you to customize the app ([more info here](settings.md))" +msgstr "" + +#: src/drawer.md:24 +msgid "Help" +msgstr "" + +#: src/drawer.md:25 +msgid "Opens this web page" +msgstr "" + +#: src/drawer.md:27 +msgid "Send feedback" +msgstr "" + +#: src/drawer.md:28 +msgid "Get support from the AnkiDroid team" +msgstr "" + +#: src/deck-overview.md:3 +msgid "[App bar](#app-bar)" +msgstr "" + +#: src/deck-overview.md:4 +msgid "[Ordinary decks](#ordinary-decks)" +msgstr "" + +#: src/deck-overview.md:5 +msgid "[Custom Study](#custom-study)" +msgstr "" + +#: src/deck-overview.md:6 +msgid "[Filtered decks](#filtered-decks)" +msgstr "" + +#: src/deck-overview.md:7 +msgid "[Empty deck](#empty-deck)" +msgstr "" + +#: src/deck-overview.md:8 +msgid "[Rebuild deck](#rebuild-deck)" +msgstr "" + +#: src/deck-overview.md:9 +msgid "[Overflow menu](#overflow-menu)" +msgstr "" + +#: src/deck-overview.md:10 +msgid "[Deck Options](#deck-options)" +msgstr "" + +#: src/deck-overview.md:13 +msgid "![deck_overview.png](img/3-deck_overview.png)" +msgstr "" + +#: src/deck-overview.md:15 +msgid "From the deck list, if you tap the counts area you will be taken to the deck overview screen. On tablets it is always shown in the area to the right of the deck list." +msgstr "" + +#: src/deck-overview.md:17 +msgid "On this screen you can view a summary of the deck, build custom study sessions, rebuild / empty filtered decks, and change deck options. When visible, pressing the study button will take you to the study screen for that deck." +msgstr "" + +#: src/deck-overview.md:19 +msgid "App bar" +msgstr "" + +#: src/deck-overview.md:20 +msgid "The icons that are shown in the app bar depend on whether your deck is an ordinary deck or a filtered deck." +msgstr "" + +#: src/deck-overview.md:22 +msgid "Ordinary decks" +msgstr "" + +#: src/deck-overview.md:24 +msgid "Custom Study" +msgstr "" + +#: src/deck-overview.md:25 +msgid "Tapping the wrench icon allows you to create a custom session, for example to do extra reviews outside your normal schedule, or study only certain cards inside a deck. See the [filtered deck section](filtered-deck.md) for more information on this." +msgstr "" + +#: src/deck-overview.md:27 +msgid "Filtered decks" +msgstr "" + +#: src/deck-overview.md:29 +msgid "Empty deck" +msgstr "" + +#: src/deck-overview.md:30 +msgid "Tapping the cross icon will empty all of the cards in the current filtered deck (i.e. return them to their original deck)." +msgstr "" + +#: src/deck-overview.md:32 +msgid "Rebuild deck" +msgstr "" + +#: src/deck-overview.md:33 +msgid "Tapping the rebuild icon will rebuild the current filtered deck according to the settings specified in filtered deck options." +msgstr "" + +#: src/deck-overview.md:35 +msgid "Overflow menu" +msgstr "" + +#: src/deck-overview.md:37 +msgid "Deck Options" +msgstr "" + +#: src/deck-overview.md:38 +msgid "Allows you to configure some options related to the current deck, such as the number of new cards and reviews to introduce each day. Please see the [desktop documentation](https://docs.ankiweb.net/deck-options.html) for more information about these study options." +msgstr "" + +#: src/reviewer.md:3 +msgid "Tapping on the deck name from the deck list, or the study button from the deck overview screen will take you to the study screen where you do your study. " +msgstr "" + +#: src/reviewer.md:5 +msgid "![reviewer.png](img/4-reviewer.png)" +msgstr "" + +#: src/reviewer.md:7 +msgid "Basics" +msgstr "" + +#: src/reviewer.md:8 +msgid "If you have not used Anki on a computer before, you may like to have a look at the first [intro video](https://docs.ankiweb.net/getting-started.html#videos) before reading on, as it explains the basic review process." +msgstr "" + +#: src/reviewer.md:10 +msgid "On the top left of the screen you'll see three numbers. From the left, these correspond to new cards, learning cards, and cards to review. These are explained in more detail in the intro videos for the desktop program, so please [check them out](https://docs.ankiweb.net/getting-started.html#videos) if you haven't already." +msgstr "" + +#: src/reviewer.md:12 +msgid "When you've looked at a card's question and remembered the answer, or decided you don't know it, tap the **show answer** button. When you do, the bottom area will change to display 2-4 answer buttons, depending on how you've answered the card previously. The buttons will display the time a card will next be shown, so 10m means **10 minutes** and **5d** means **5 days**. You can tap directly on these buttons to choose a particular answer. " +msgstr "" + +#: src/reviewer.md:14 +msgid "To make reviewing faster, you can configure gestures (for example taps and swipes) to answer cards without using the buttons. See the [preferences section](settings.md) for more information on configuring gestures." +msgstr "" + +#: src/reviewer.md:17 +msgid "The App Bar at the top of the study screen has several buttons for performing various common actions. The number of buttons which are shown is determined automatically by Android based on the size and resolution of your screen. If there is not enough space to show the button for a given action, then the action will be available from the menu instead. If you are unsure what a button does, you can long-tap on it to see the name of the action. The following action are available:" +msgstr "" + +#: src/reviewer.md:20 +msgid "Undo the answer you chose for the last card you studied (button always shown)." +msgstr "" + +#: src/reviewer.md:22 +msgid "Mark Card" +msgstr "" + +#: src/reviewer.md:23 +msgid "Adds a **marked** tag to the current note, so it can be easily found in the browser. This is useful when you want to take some action on the note at a later date, such as looking up a word when you get home. Marked cards also show a small star in the upper-right-hand corner during reviews." +msgstr "" + +#: src/reviewer.md:26 +msgid "Flag Card" +msgstr "" + +#: src/reviewer.md:27 +msgid "Adds a color coded **flag** (red, orange, green, or blue) This can be used as a general purpose indicator to differentiate your cards. Flags are represented by a number from 1-4, corresponding to the previously listed colors." +msgstr "" + +#: src/reviewer.md:30 +msgid "Edit Card" +msgstr "" + +#: src/reviewer.md:31 +msgid "Open the edit note screen, where you can change the content displayed on the flashcard (see the [editing notes section](editing-notes.md) for more help)" +msgstr "" + +#: src/reviewer.md:33 +msgid "Hide / Delete" +msgstr "" + +#: src/reviewer.md:34 +msgid "Give options to bury, suspend, or delete the current note or card" +msgstr "" + +#: src/reviewer.md:36 +msgid "**Bury card / Bury note:** Hides a card or all of the note’s cards from review until the next day. (If you want to unbury cards before then, you can choose “unbury” from the long-press menu in the [deck list](deck-picker.md), or from the [deck overview screen](deck-overview.md).) This is useful if you cannot answer the card at the moment or you want to come back to it another time. Burying can also happen automatically for cards of the same note. If cards were in learning when they are buried, they are moved back to the new card queue or review queue prior to being buried." +msgstr "" + +#: src/reviewer.md:37 +msgid "**Suspend card / Suspend note:** Hides a card or all of the note’s cards from review until they are manually unsuspended (by long-tapping a card in the [card browser](browser.md)). This is useful if you want to avoid reviewing the note for some time, but don’t want to delete it. If cards were in learning when they are suspended, they are moved back to the new card queue or review queue prior to being suspended." +msgstr "" + +#: src/reviewer.md:38 +msgid "**Delete note:** Deletes the note and all of its cards." +msgstr "" + +#: src/reviewer.md:40 +msgid "Replay Audio" +msgstr "" + +#: src/reviewer.md:41 +msgid "If the card has audio on the front or back, it will be played again." +msgstr "" + +#: src/reviewer.md:43 +msgid "Enable / Disable Whiteboard" +msgstr "" + +#: src/reviewer.md:44 +msgid "This action enables or disables the whiteboard feature for the current deck. The whiteboard feature allows you to draw on the screen, which is particularly useful for practicing drawing characters from languages such as Japanese. When the whiteboard has been enabled for the current deck, two new actions will become available for clearing and hiding the whiteboard. Disabling the whiteboard will hide these actions as well as the whiteboard itself." +msgstr "" + +#: src/reviewer.md:47 +msgid "Open the deck specific study options. See the [desktop documentation](https://docs.ankiweb.net/deck-options.html) for more information about these study options." +msgstr "" + +#: src/reviewer.md:49 +msgid "Check Pronunciation" +msgstr "" + +#: src/reviewer.md:50 +msgid "This action enables or disables the temporary audio recorder toolbar at the top of the card. This feature allows you to record your voice and replay it. It is used primarily to check your pronunciation. This toolbar is composed of three buttons: play, stop playing and record microphone audio. This tool can be used while viewing either the question or the answer." +msgstr "" + +#: src/reviewer.md:52 +msgid "Reaching the end of the study session" +msgstr "" + +#: src/reviewer.md:53 +msgid "When you've finished the cards that are due to be studied today, you'll be taken back to the decks list and shown a congratulations message. From here you can select a different deck, or if you've finished studying for the day, you can simply tap the home button in order to close AnkiDroid (and you can also do this in the middle of reviews if you wish)." +msgstr "" + +#: src/reviewer.md:55 +msgid "If you wish to keep studying the same deck further, tap on the deck again which will give you several options for continued study. Please see the [filtered deck](filtered-deck.md) section for more on custom study." +msgstr "" + +#: src/adding-notes.md:3 +msgid "[Type](#type)" +msgstr "" + +#: src/adding-notes.md:4 +msgid "[Deck](#deck)" +msgstr "" + +#: src/adding-notes.md:5 +msgid "[Fields](#fields)" +msgstr "" + +#: src/adding-notes.md:6 +msgid "[Media Buttons](#media-buttons)" +msgstr "" + +#: src/adding-notes.md:7 +msgid "[Tags](#tags)" +msgstr "" + +#: src/adding-notes.md:8 +msgid "[Cards](#cards)" +msgstr "" + +#: src/adding-notes.md:10 +msgid "__Note:__ _This section onwards assumes you understand what [notes, fields, card templates, and note types](https://docs.ankiweb.net/getting-started.html#notes--fields) are_" +msgstr "" + +#: src/adding-notes.md:12 +msgid "To add a new note, tap the **+** button at the bottom of the deck list and choose **Add**." +msgstr "" + +#: src/adding-notes.md:14 +msgid "![adding.png](img/5-adding.png)" +msgstr "" + +#: src/adding-notes.md:16 +msgid "The following controls are available in the add note screen:" +msgstr "" + +#: src/adding-notes.md:18 +msgid "Type" +msgstr "" + +#: src/adding-notes.md:19 +msgid "Allows you to select the type of note you'd like to add. For most purposes the **Basic** note type is sufficient, but for example if you would like an extra card generated which is the reverse of the main card (i.e. shows the **Back** field on the front of the card), you could chose the **Basic (and reversed card)** note type." +msgstr "" + +#: src/adding-notes.md:22 +msgid "Deck" +msgstr "" + +#: src/adding-notes.md:23 +msgid "Allows you to change the deck the generated card/cards will be added to." +msgstr "" + +#: src/adding-notes.md:25 +msgid "Fields" +msgstr "" + +#: src/adding-notes.md:26 +msgid "Below the deck selector are the fields for the note (for example the **Basic** note type has two fields **Front** and **Back**). When you tap on a field, a keyboard will come up, allowing you to type in information." +msgstr "" + +#: src/adding-notes.md:28 +msgid "Media Buttons" +msgstr "" + +#: src/adding-notes.md:29 +msgid "Next to each field is an attach icon, which allows you to add media to your note (this feature is currently in the experimental phase). \n" +"Add image lets you add images either via your device's camera (if it has one), or from your photo library. Record audio allows you to record your voice and place it into a field. The advanced editor lets you automatically search for translations or pronunciation audio files online." +msgstr "" + +#: src/adding-notes.md:33 +msgid "Tags" +msgstr "" + +#: src/adding-notes.md:34 +msgid "Brings up a dialog which lets you add / remove tags from the note." +msgstr "" + +#: src/adding-notes.md:36 +msgid "Cards" +msgstr "" + +#: src/adding-notes.md:37 +msgid "Shows the names of the cards which will be generated for the selected note type. Tapping on this button will bring up a dialog which lets you preview the source code for the card template of the selected note type. From here you can edit, preview, add, and delete card templates. See the [cards and templates section](https://docs.ankiweb.net/templates/intro.html) of the Anki Desktop manual for more information about card templates." +msgstr "" + +#: src/adding-notes.md:39 +msgid "Long press in a text entry field to add a cloze deletion around the selected text, or an empty cloze deletion if there is no selected text." +msgstr "" + +#: src/adding-notes.md:41 +msgid "When you've finished typing in the content of a note, tap the tick icon in the app bar at the top to add it to your collection. Alternatively, if you want to go back to what you were doing without saving, you can tap the app icon, or use the hardware back button." +msgstr "" + +#: src/editing-notes.md:2 +msgid "The edit note screen can be opened by choosing edit while reviewing, or by opening a card in the browser. The edit screen is similar to the add new note screen mentioned above, with some key differences:" +msgstr "" + +#: src/editing-notes.md:5 +msgid "Changing the deck operates on the selected card (which is underlined in the **Cards** box). If a note type is chosen which has more than one card, only the currently selected card will be moved to the new deck." +msgstr "" + +#: src/editing-notes.md:8 +msgid "Changing the **Type** dropdown selector changes to the note type edit mode. In this mode, editing the content of the note (i.e. deck, fields, etc) is disabled, and if a custom note type with more than two fields is being used, additional buttons will appear which let you control the mapping of the fields to the new note type." +msgstr "" + +#: src/editing-notes.md:11 +msgid "If a note type is selected which has less cards than the original note type, only the first n cards will be kept. For example changing from **Basic (and reversed card)** to **Basic** will lead to only the first card being kept. To warn you of this, the text in the **Cards** box will appear red, and a confirmation dialog will be shown before the note is saved." +msgstr "" + +#: src/editing-notes.md:14 +msgid "Hint: to change the type for multiple notes in one go, or to customize the mapping between cards, use the **Change note type** option in the browser on Anki Desktop." +msgstr "" + +#: src/editing-notes.md:16 +msgid "There are also several advanced options available in the main menu:" +msgstr "" + +#: src/editing-notes.md:18 +msgid "Add note" +msgstr "" + +#: src/editing-notes.md:19 +msgid "Create a new empty note" +msgstr "" + +#: src/editing-notes.md:21 +msgid "Copy card" +msgstr "" + +#: src/editing-notes.md:22 +msgid "Copy the current note to a new editable note" +msgstr "" + +#: src/editing-notes.md:24 +msgid "Reset progress" +msgstr "" + +#: src/editing-notes.md:25 +msgid "Move the card to the end of the new card queue. The current state of the card is cleared, but not its revision history." +msgstr "" + +#: src/editing-notes.md:27 src/keyboard-shortcuts.md:59 +msgid "Reschedule" +msgstr "" + +#: src/editing-notes.md:28 +msgid "Allows you to reschedule as a review card on a given date. This is useful if you have imported already-learnt material, and you want to start it off with higher initial intervals." +msgstr "" + +#: src/browser.md:9 +msgid "[Searching](#searching)" +msgstr "" + +#: src/browser.md:10 +msgid "[tag:marked](#tagmarked)" +msgstr "" + +#: src/browser.md:11 +msgid "[is:due](#isdue)" +msgstr "" + +#: src/browser.md:12 +msgid "[front:rabbit](#frontrabbit)" +msgstr "" + +#: src/browser.md:13 +msgid "[flag:1](#flag1)" +msgstr "" + +#: src/browser.md:15 +msgid "You can search for or browse cards by tapping the **Card browser** button from the [navigation drawer](drawer.md)." +msgstr "" + +#: src/browser.md:17 +msgid "![img/6-browser.png](img/6-browser.png)" +msgstr "" + +#: src/browser.md:19 +msgid "The browser screen starts by displaying all the cards in the currently selected deck. You can search for cards in the selected deck by tapping the magnifying glass icon in the top. You can change the selected deck (or change to all decks) by choosing the deck from the dropdown list on the top left." +msgstr "" + +#: src/browser.md:21 +msgid "By default, the first column in the browser gives the text which will be shown on the question (i.e. front side) of the flashcard, and the second column shows the text from the answer (i.e. the back side) of the flashcard. " +msgstr "" + +#: src/browser.md:23 +msgid "The first column can also be configured to show the [sort field](https://docs.ankiweb.net/editing.html#customizing-fields) for a more compact display. The second column can be configured to show many different parameters by tapping the drop down menu in the column heading. " +msgstr "" + +#: src/browser.md:25 +msgid "Note that the content of the columns is dynamically calculated as your scroll through the list of the cards." +msgstr "" + +#: src/browser.md:27 +msgid "From the search results, you can tap on a card to edit it (see the [edit note section](editing-notes.md) above), or long-tapping on it will show a menu allowing you to perform the following actions:" +msgstr "" + +#: src/browser.md:29 +msgid "Mark / unmark note" +msgstr "" + +#: src/browser.md:30 +msgid "Add / remove the **marked** tag from the note. Cards with a marked note are highlighted in purple." +msgstr "" + +#: src/browser.md:32 +msgid "Flag card" +msgstr "" + +#: src/browser.md:33 +msgid "Change or remove the color coded **flag** on the card. Cards with a flag are highlighted in the flags color." +msgstr "" + +#: src/browser.md:35 +msgid "Suspend / unsuspend card" +msgstr "" + +#: src/browser.md:36 +msgid "Suspended cards are highlighted in yellow, and are not shown during review." +msgstr "" + +#: src/browser.md:38 src/gestures.md:107 +msgid "Delete note" +msgstr "" + +#: src/browser.md:39 +msgid "Delete the note of the currently selected card, and all cards belonging to that note. This action cannot be undone without [restoring from backup](backups.md)." +msgstr "" + +#: src/browser.md:41 +msgid "Preview" +msgstr "" + +#: src/browser.md:42 +msgid "Render the currently selected card so that you can see what it looks like in the reviewer." +msgstr "" + +#: src/browser.md:44 +msgid "Select multiple cards" +msgstr "" + +#: src/browser.md:45 +msgid "Long-tapping on a single card will select the single card. While that card is selected, if you long-tap on another card on your screen, then all of the cards between the first selected card and the last card will be selected. This allows for actions to be performed on multiple cards at once." +msgstr "" + +#: src/browser.md:47 +msgid "Searching" +msgstr "" + +#: src/browser.md:48 +msgid "AnkiDroid supports all the search strings that the desktop version of Anki does, allowing you to perform quite complex searches. Some examples:" +msgstr "" + +#: src/browser.md:50 +msgid "tag:marked" +msgstr "" + +#: src/browser.md:51 +msgid "show cards that with the tag **marked**" +msgstr "" + +#: src/browser.md:53 +msgid "is:due" +msgstr "" + +#: src/browser.md:54 +msgid "show only cards that are waiting for review" +msgstr "" + +#: src/browser.md:56 +msgid "front:rabbit" +msgstr "" + +#: src/browser.md:57 +msgid "show only cards where the front field is exactly **rabbit** " +msgstr "" + +#: src/browser.md:59 +msgid "flag:1" +msgstr "" + +#: src/browser.md:60 +msgid "show only cards marked with a red flag" +msgstr "" + +#: src/browser.md:62 +msgid "For a full list of the possibilities, please see the section in the [desktop manual](https://docs.ankiweb.net/searching.html)." +msgstr "" + +#: src/browser.md:64 +msgid "Alternatively, some more commonly used filters (marked, suspended, and tagged cards) can be quickly applied without manually typing them by choosing them from the overflow menu. You can also save and recall common search queries from the menu." +msgstr "" + +#: src/filtered-deck.md:3 +msgid "Anki is designed to optimize the learning process, so that you study the minimum amount necessary to remember the majority of your cards. Once the congratulations screen is reached, further study becomes a case of diminishing returns: the amount of extra time spent going over the same cards again is generally not worth the moderate increase in retention you'll see." +msgstr "" + +#: src/filtered-deck.md:5 +msgid "That said, if you have a test looming, or simply want to pass some time, it's possible to keep reviewing even after you are shown the congratulations message." +msgstr "" + +#: src/filtered-deck.md:7 +msgid "A **filtered deck** is a temporary deck that contains cards based on various criteria, such as **forgotten today**, `is tagged 'hard'`, and so on. After studying cards in a filtered deck, or when the filtered deck is deleted, the cards are automatically returned to their original deck." +msgstr "" + +#: src/filtered-deck.md:9 +msgid "The easiest way to create a filtered deck is by long clicking on a deck and choosing the **custom study** option. " +msgstr "" + +#: src/filtered-deck.md:11 +msgid "Advanced users can create a filtered deck manually, by choosing **Create filtered deck** from the overflow menu in the deck list screen." +msgstr "" + +#: src/filtered-deck.md:13 +msgid "For further information on filtered decks, please see the [desktop documentation](https://docs.ankiweb.net/filtered-decks.html#filtered-decks--cramming)." +msgstr "" + +#: src/importing/importing-anki-files.md:3 +msgid "You can import Anki files (with .apkg file format) directly into AnkiDroid. Other file formats cannot be imported directly into AnkiDroid, however flashcards from most other applications can be imported into Anki Desktop on your computer, which can then be [added into AnkiDroid in the usual way](../anki-desktop.md). See the [importing section of the Anki Desktop manual](https://docs.ankiweb.net/importing/intro.html) for help on importing into Anki Desktop." +msgstr "" + +#: src/importing/importing-anki-files.md:6 +msgid "As in Anki Desktop, AnkiDroid distinguishes between [the two types of .apkg files](https://docs.ankiweb.net/exporting.html) (**collection package** and **deck package**) based on the filename. Collection packages have the name **collection.colpkg**, and when imported will completely _replace all contents_ in AnkiDroid. Any apkg file which is **_not_** named something that ends in **.colpkg** will be treated as a deck package, which will be _merged with any existing content_ when imported into to AnkiDroid." +msgstr "" + +#: src/importing/importing-anki-files.md:8 +msgid "You can import .apkg Anki collection files into AnkiDroid either by opening them using the standard Android system, or by manually importing them from within AnkiDroid:" +msgstr "" + +#: src/importing/importing-anki-files.md:10 +msgid "Open the file using Android" +msgstr "" + +#: src/importing/importing-anki-files.md:11 +msgid "Apkg files are automatically associated with AnkiDroid, so for example if you open a .apkg email attachment which you sent to yourself, then AnkiDroid will automatically open the file and confirm if you want to import it. Simply click OK and the apkg file will be imported." +msgstr "" + +#: src/importing/importing-anki-files.md:13 +msgid "Import the file manually in AnkiDroid" +msgstr "" + +#: src/importing/importing-anki-files.md:14 +msgid "You can also manually import .apkg files as follows:" +msgstr "" + +#: src/importing/importing-anki-files.md:16 +msgid "Connect your device to your computer using USB" +msgstr "" + +#: src/importing/importing-anki-files.md:17 +msgid "Copy the .apkg from your computer to the AnkiDroid folder on your device" +msgstr "" + +#: src/importing/importing-anki-files.md:18 +msgid "Open AnkiDroid on your device" +msgstr "" + +#: src/importing/importing-anki-files.md:19 +msgid "From the main menu in the deck list, choose _Import_" +msgstr "" + +#: src/importing/importing-anki-files.md:20 +msgid "Choose the apkg file you just copied to your device when prompted" +msgstr "" + +#: src/importing/importing-anki-files.md:21 +msgid "Tap OK" +msgstr "" + +#: src/importing/importing-anki-databases.md:3 +msgid "AnkiDroid does not support directly importing Anki database (`.anki2`) files. A database import will replace your collection with the contents the provided file. If you want to perform a full replacement, you should import a `collection[.apkg/.colpkg]` created in the app with the export function." +msgstr "" + +#: src/importing/importing-anki-databases.md:5 +msgid "Importing anki2 files manually" +msgstr "" + +#: src/importing/importing-anki-databases.md:7 +msgid "This is not officially supported, but `.anki2` files can manually be imported if needed, in cases of troubleshooting for example:" +msgstr "" + +#: src/importing/importing-anki-databases.md:9 +msgid "Create a new folder on your Android file system" +msgstr "" + +#: src/importing/importing-anki-databases.md:10 +msgid "Obtain the full path to the folder as provided by your file manager, this will typically appear as: `/storage/emulated/0/`" +msgstr "" + +#: src/importing/importing-anki-databases.md:11 +msgid "Place the `.anki2` file in the newly created folder" +msgstr "" + +#: src/importing/importing-anki-databases.md:12 +msgid "Rename the file to `collection.anki2`" +msgstr "" + +#: src/importing/importing-anki-databases.md:13 +msgid "(If applicable) Temporarily log out of your AnkiWeb account: `Settings - AnkiDroid - AnkiWeb account`" +msgstr "" + +#: src/importing/importing-anki-databases.md:14 +msgid "Open `Settings - Advanced - AnkiDroid Directory` and set the AnkiDroid Directory to the newly created folder." +msgstr "" + +#: src/exporting.md:3 +msgid "AnkiDroid can export your flashcards in the .apkg Anki file format so that you can import them into Anki Desktop, or share them with other people. As in Anki Desktop, you can either export a [collection package or deck package](https://docs.ankiweb.net/exporting.html#packaged-decks), depending on what you are trying to achieve." +msgstr "" + +#: src/exporting.md:6 +msgid "There are two export options available: **include scheduling information** and **include media**. Generally the default options are sufficient, if you choose not to include scheduling information, Anki will assume that you are sharing the deck with other people, and will remove marked and leech tags so that they will have a clean copy of it." +msgstr "" + +#: src/exporting.md:8 +msgid "Exporting collection package" +msgstr "" + +#: src/exporting.md:9 +msgid "When exporting for use in Anki Desktop, you generally want to [export your entire collection](https://docs.ankiweb.net/exporting.html#collection-colpkg), including all your review history etc. " +msgstr "" + +#: src/exporting.md:11 src/exporting.md:28 +msgid "From the main menu in the decks screen:" +msgstr "" + +#: src/exporting.md:13 +msgid "Tap the **Export** item in the menu." +msgstr "" + +#: src/exporting.md:14 +msgid "Tap **OK** using default options" +msgstr "" + +#: src/exporting.md:15 +msgid "Tap **OK** again to email the exported collection.apkg file to yourself, or alternatively you can manually copy to your computer using USB" +msgstr "" + +#: src/exporting.md:17 +msgid "To import the file on your computer:" +msgstr "" + +#: src/exporting.md:19 +msgid "Save the file **collection.apkg** to your desktop" +msgstr "" + +#: src/exporting.md:20 +msgid "Double-click on the file to start Anki." +msgstr "" + +#: src/exporting.md:21 +msgid "Confirm you wish to replace, so that the deck from your mobile device overwrites the old data on your desktop." +msgstr "" + +#: src/exporting.md:23 +msgid "After importing, you can delete the apkg file on your desktop if you wish." +msgstr "" + +#: src/exporting.md:25 +msgid "Exporting deck package" +msgstr "" + +#: src/exporting.md:26 +msgid "If you want to share a deck in AnkiDroid with another user, you can export a deck package. " +msgstr "" + +#: src/exporting.md:30 +msgid "Long tap on the deck you wish to export" +msgstr "" + +#: src/exporting.md:31 +msgid "Tap **Export**" +msgstr "" + +#: src/exporting.md:32 +msgid "Tap **OK** using the default options" +msgstr "" + +#: src/exporting.md:33 +msgid "Tap **OK** again to email the exported apkg to another user" +msgstr "" + +#: src/backups.md:3 +msgid "AnkiDroid will automatically create backups of your collection for you. The backups include all your cards and statistics, but do not include sounds or images." +msgstr "" + +#: src/backups.md:5 +msgid "The backup is taken in the background when you first start the app. A backup will only happen if more than 5 hours has elapsed since the last time a backup was created. By default, AnkiDroid will store the last 8 backups; this number can be changed in the main settings." +msgstr "" + +#: src/backups.md:8 +msgid "You can restore a backup by choosing the _restore from backup_ option from the main menu of the [decks screen](deck-picker.md)." +msgstr "" + +#: src/settings.md:3 +msgid "[AnkiDroid](#ankidroid)" +msgstr "" + +#: src/settings.md:4 +msgid "[AnkiWeb account](#ankiweb-account)" +msgstr "" + +#: src/settings.md:5 +msgid "[Fetch media on sync](#fetch-media-on-sync)" +msgstr "" + +#: src/settings.md:6 +msgid "[Automatic synchronization](#automatic-synchronization)" +msgstr "" + +#: src/settings.md:7 +msgid "[Deck for new cards](#deck-for-new-cards)" +msgstr "" + +#: src/settings.md:8 +msgid "[Language](#language)" +msgstr "" + +#: src/settings.md:9 +msgid "[Error reporting mode](#error-reporting-mode)" +msgstr "" + +#: src/settings.md:10 +msgid "[Notifications](#notifications)" +msgstr "" + +#: src/settings.md:11 +msgid "[Notify when](#notify-when)" +msgstr "" + +#: src/settings.md:12 +msgid "[Vibrate](#vibrate)" +msgstr "" + +#: src/settings.md:13 +msgid "[Blink light](#blink-light)" +msgstr "" + +#: src/settings.md:14 +msgid "[Reviewing](#reviewing)" +msgstr "" + +#: src/settings.md:15 +msgid "[New card position](#new-card-position)" +msgstr "" + +#: src/settings.md:16 +msgid "[Start of next day](#start-of-next-day)" +msgstr "" + +#: src/settings.md:17 +msgid "[Learn ahead limit](#learn-ahead-limit)" +msgstr "" + +#: src/settings.md:18 +msgid "[Timebox limit](#timebox-limit)" +msgstr "" + +#: src/settings.md:19 +msgid "[Display](#display)" +msgstr "" + +#: src/settings.md:20 +msgid "[Keep screen on](#keep-screen-on)" +msgstr "" + +#: src/settings.md:21 +msgid "[Fullscreen mode](#fullscreen-mode)" +msgstr "" + +#: src/settings.md:22 +msgid "[Center align](#center-align)" +msgstr "" + +#: src/settings.md:23 +msgid "[Show button time](#show-button-time)" +msgstr "" + +#: src/settings.md:24 +msgid "[Card zoom](#card-zoom)" +msgstr "" + +#: src/settings.md:25 +msgid "[Image zoom](#image-zoom)" +msgstr "" + +#: src/settings.md:26 +msgid "[Answer button size](#answer-button-size)" +msgstr "" + +#: src/settings.md:27 +msgid "[Show remaining](#show-remaining)" +msgstr "" + +#: src/settings.md:28 +msgid "[Whiteboard](#whiteboard)" +msgstr "" + +#: src/settings.md:29 +msgid "[Stroke width](#stroke-width)" +msgstr "" + +#: src/settings.md:30 +msgid "[Black strokes](#black-strokes)" +msgstr "" + +#: src/settings.md:31 +msgid "[Automatic display answer](#automatic-display-answer)" +msgstr "" + +#: src/settings.md:32 +msgid "[Time to show answer](#time-to-show-answer)" +msgstr "" + +#: src/settings.md:33 +msgid "[Time to show next question](#time-to-show-next-question)" +msgstr "" + +#: src/settings.md:34 +msgid "[Fonts](#fonts)" +msgstr "" + +#: src/settings.md:35 +msgid "[Default font](#default-font)" +msgstr "" + +#: src/settings.md:36 +msgid "[Default font applicability](#default-font-applicability)" +msgstr "" + +#: src/settings.md:37 +msgid "[Browser and editor font](#browser-and-editor-font)" +msgstr "" + +#: src/settings.md:38 +msgid "[Card browser font scaling](#card-browser-font-scaling)" +msgstr "" + +#: src/settings.md:40 +msgid "The preferences screen can be accessed by opening the navigation drawer, and choosing **Settings**. It allows you to customize various application settings and how AnkiDroid appears." +msgstr "" + +#: src/settings.md:42 +msgid "The Preferences screen is divided up into different sections, which are covered below." +msgstr "" + +#: src/settings.md:44 +msgid "AnkiDroid" +msgstr "" + +#: src/settings.md:45 +msgid "These are the general settings which affect the whole app:" +msgstr "" + +#: src/settings.md:47 +msgid "AnkiWeb account" +msgstr "" + +#: src/settings.md:48 +msgid "Change the account used for syncing with the cloud. For more information on syncing, please see [this section](anki-desktop.md)." +msgstr "" + +#: src/settings.md:50 +msgid "Fetch media on sync" +msgstr "" + +#: src/settings.md:51 +msgid "By default, AnkiDroid will sync sounds and images as well as your cards and review history. If you disable this option, sounds and images will not be downloaded from or uploaded to the sync server by AnkiDroid." +msgstr "" + +#: src/settings.md:54 +msgid "Automatic synchronization" +msgstr "" + +#: src/settings.md:55 +msgid "Enable this option if you want AnkiDroid to sync every time you open and close the app. There is a limit of once every ten minutes for this behavior. Once a sync begins you can cancel it by pressing your device's back button, however it can take some time for the cancellation to take effect." +msgstr "" + +#: src/settings.md:57 +msgid "Users that want more fine-grained control over when sync occurred might like to use a 3rd party app like Tasker to automate synchronization. See the " +msgstr "" + +#: src/settings.md:57 +msgid "API documentation" +msgstr "" + +#: src/settings.md:57 +msgid " for more information on this." +msgstr "" + +#: src/settings.md:59 +msgid "Deck for new cards" +msgstr "" + +#: src/settings.md:60 +msgid "The default of **Use current deck** means that Anki saves the last-used note type for each deck and selects it again then next time you choose the deck (and, in addition, will start with the current deck selected when choosing Add from anywhere). The other option, **Decide by note type,** saves the last-used deck for each note type (and opens the add window to the last-used note type when you choose Add). This may be more convenient if you always use a single note type for each deck." +msgstr "" + +#: src/settings.md:62 +msgid "Language" +msgstr "" + +#: src/settings.md:63 +msgid "Change the language. Note: AnkiDroid translations are contributed by volunteers. If you find missing or incorrect translations, feel free to contribute to the translation project. More details can be found on the " +msgstr "" + +#: src/settings.md:63 +msgid "AnkiDroid Wiki" +msgstr "" + +#: src/settings.md:63 src/advanced-features/custom-fonts.md:15 +msgid "." +msgstr "" + +#: src/settings.md:65 +msgid "Error reporting mode" +msgstr "" + +#: src/settings.md:66 +msgid "Control whether or not AnkiDroid asks your permission before sending error reports to our error reporting system when AnkiDroid crashes. You can also disable the reporting feature entirely if you wish." +msgstr "" + +#: src/settings.md:68 +msgid "Notifications" +msgstr "" + +#: src/settings.md:69 +msgid "This subsection allows you configure when and how AnkiDroid shows alerts in the Android notification bar." +msgstr "" + +#: src/settings.md:71 +msgid "Notify when" +msgstr "" + +#: src/settings.md:72 +msgid "**Never notify** will disable all notifications from AnkiDroid. **Pending messages available** will only show important status updates like when a sync completed. **More than n cards due** will show a notification when you have more than n cards due (requires the widget to be enabled)." +msgstr "" + +#: src/settings.md:74 +msgid "Vibrate" +msgstr "" + +#: src/settings.md:75 +msgid "Checking this will make your device vibrate when showing a notification" +msgstr "" + +#: src/settings.md:77 +msgid "Blink light" +msgstr "" + +#: src/settings.md:78 +msgid "Checking this will make your device light blink when an unread notification exists (if your device has a notification LED)" +msgstr "" + +#: src/settings.md:81 +msgid "Reviewing" +msgstr "" + +#: src/settings.md:83 +msgid "The reviewing screen allows you to customize how AnkiDroid behaves when you're reviewing cards. Note that only the reviewing settings which are applied to **all decks** are shown here. There are more settings related to reviewing which are **deck specific**. These deck specific settings are located in **Deck options**." +msgstr "" + +#: src/settings.md:86 +msgid "New card position" +msgstr "" + +#: src/settings.md:87 +msgid "Controls when new cards are shown: either mixed with, after, or before all reviews." +msgstr "" + +#: src/settings.md:89 +msgid "Start of next day" +msgstr "" + +#: src/settings.md:90 +msgid "Controls when AnkiDroid should start showing the next day's cards. The default setting of 4AM ensures that if you're studying around midnight, you won't have two days worth of cards shown to you in one session. If you stay up very late or wake up very early, you may want to adjust this to a time you're usually sleeping." +msgstr "" + +#: src/settings.md:93 +msgid "Learn ahead limit" +msgstr "" + +#: src/settings.md:94 +msgid "The Learn ahead limit tells AnkiDroid how to behave when there is nothing left to study in the current deck but cards in learning. The default setting of 20 minutes tells AnkiDroid that cards should be shown early if they are due to be shown in less than 20 minutes and there's nothing else to do. If you set this to 0, Anki will always wait the full period, showing the congratulations screen until the remaining cards are ready to be reviewed." +msgstr "" + +#: src/settings.md:96 +msgid "Timebox limit" +msgstr "" + +#: src/settings.md:97 +msgid "Timeboxing is a technique to help you focus by dividing a longer activity (such as a 30 minute study session) into smaller blocks. If you set the timebox time limit to a non-zero number of minutes, AnkiDroid will periodically show a message saying you how many cards you've managed to study during the prescribed time limit." +msgstr "" + +#: src/settings.md:99 +msgid "Display" +msgstr "" + +#: src/settings.md:100 +msgid "This subsection relates to the way cards are displayed during reviewing" +msgstr "" + +#: src/settings.md:102 +msgid "Keep screen on" +msgstr "" + +#: src/settings.md:103 +msgid "Ignore the automatic screen timeout setting in Android to always keep the screen on." +msgstr "" + +#: src/settings.md:105 +msgid "Fullscreen mode" +msgstr "" + +#: src/settings.md:106 +msgid "Switches to an immersive fullscreen mode so that you can use more of the screen. You can choose between **Hide the system bars** which will hide the system status bar, action bar, and bottom navigation buttons. Alternatively you can choose **Hide the system bars and answer buttons**, which will hide everything except for the actual card content itself. You can temporarily exit fullscreen mode by swiping inwards (i.e. down or up) from the system bars." +msgstr "" + +#: src/settings.md:108 +msgid "_Note that immersive fullscreen mode is only supported on Android 4.4+_" +msgstr "" + +#: src/settings.md:110 +msgid "Center align" +msgstr "" + +#: src/settings.md:111 +msgid "By default AnkiDroid tries to show cards exactly as they are shown on Anki Desktop, however if you prefer your cards to be center aligned vertically in AnkiDroid then you can enable this feature." +msgstr "" + +#: src/settings.md:113 +msgid "Show button time" +msgstr "" + +#: src/settings.md:114 +msgid "By default, the answer buttons will display the time a card will next be shown. If you disable this option, the times will not appear, and only labels like **Again**, **Good** and **Easy** will be shown." +msgstr "" + +#: src/settings.md:116 +msgid "Card zoom" +msgstr "" + +#: src/settings.md:117 +msgid "Here you can increase the zoom level of the card content (excluding images). You can use this option if you want to increase the font size for all cards." +msgstr "" + +#: src/settings.md:119 +msgid "Image zoom" +msgstr "" + +#: src/settings.md:120 +msgid "Here you can increase the zoom level of any images embedded in your cards." +msgstr "" + +#: src/settings.md:122 +msgid "Answer button size" +msgstr "" + +#: src/settings.md:123 +msgid "If you find it difficult to press the answer button, you can use this setting to make it bigger." +msgstr "" + +#: src/settings.md:125 +msgid "Show remaining" +msgstr "" + +#: src/settings.md:126 +msgid "Disabling this allows you to hide the card count in the top left of the screen." +msgstr "" + +#: src/settings.md:128 +msgid "Whiteboard" +msgstr "" + +#: src/settings.md:129 +msgid "This subsection controls the whiteboard in the reviewer. Note: the whiteboard must be enabled in each deck individually from the menu in the study screen." +msgstr "" + +#: src/settings.md:132 +msgid "Stroke width" +msgstr "" + +#: src/settings.md:133 +msgid "Control the stroke width of the whiteboard. Reducing the stroke width may allow you to draw with more detail." +msgstr "" + +#: src/settings.md:135 +msgid "Black strokes" +msgstr "" + +#: src/settings.md:136 +msgid "Use black strokes instead of color, which may reduce memory usage. Note: this setting doesn't apply when night mode is enabled." +msgstr "" + +#: src/settings.md:138 +msgid "Automatic display answer" +msgstr "" + +#: src/settings.md:139 +msgid "The automatic display answer feature allows you to have the answer shown automatically after some timeout period. You can also have the next question shown automatically; in this case the card is assumed to be failed (i.e. the again button is automatically chosen)" +msgstr "" + +#: src/settings.md:141 +msgid "Time to show answer" +msgstr "" + +#: src/settings.md:142 +msgid "Time to wait until answer is automatically shown" +msgstr "" + +#: src/settings.md:144 +msgid "Time to show next question" +msgstr "" + +#: src/settings.md:145 +msgid "Time to wait until next question is automatically shown." +msgstr "" + +#: src/settings.md:147 +msgid "Fonts" +msgstr "" + +#: src/settings.md:148 +msgid "In this screen you can change the font used by AnkiDroid, and some scaling options related to fonts. See the [custom fonts](advanced-features/custom-fonts.md) section for more information about using custom fonts." +msgstr "" + +#: src/settings.md:151 +msgid "Default font" +msgstr "" + +#: src/settings.md:152 +msgid "Choose the default font used by the AnkiDroid reviewer. You can add fonts to this list by copying them to the **fonts** folder." +msgstr "" + +#: src/settings.md:154 +msgid "Default font applicability" +msgstr "" + +#: src/settings.md:155 +msgid "The default setting is to only use the default font when no font has been specified in the card styling via Anki Desktop, however you can also force the default font to be applied, ignoring any font specification in the card styling." +msgstr "" + +#: src/settings.md:157 +msgid "Browser and editor font" +msgstr "" + +#: src/settings.md:158 +msgid "The font to be used by the browser and editor" +msgstr "" + +#: src/settings.md:160 +msgid "Card browser font scaling" +msgstr "" + +#: src/settings.md:161 +msgid "Lets you change the font size used in the card browser." +msgstr "" + +#: src/gestures.md:3 +msgid "[Actions](#actions)" +msgstr "" + +#: src/gestures.md:4 +msgid "[No action](#no-action)" +msgstr "" + +#: src/gestures.md:5 +msgid "[Answer button 1](#answer-button-1)" +msgstr "" + +#: src/gestures.md:6 +msgid "[Answer button 2](#answer-button-2)" +msgstr "" + +#: src/gestures.md:7 +msgid "[Answer button 3](#answer-button-3)" +msgstr "" + +#: src/gestures.md:8 +msgid "[Answer button 4](#answer-button-4)" +msgstr "" + +#: src/gestures.md:9 +msgid "[Answer recommended (green)](#answer-recommended-green)" +msgstr "" + +#: src/gestures.md:10 +msgid "[Answer better than recommended](#answer-better-than-recommended)" +msgstr "" + +#: src/gestures.md:12 +msgid "[Edit card](#edit-card)" +msgstr "" + +#: src/gestures.md:13 +msgid "[Mark](#mark)" +msgstr "" + +#: src/gestures.md:14 +msgid "[Lookup expression](#lookup-expression)" +msgstr "" + +#: src/gestures.md:15 +msgid "[Bury card](#bury-card)" +msgstr "" + +#: src/gestures.md:16 +msgid "[Suspend card](#suspend-card)" +msgstr "" + +#: src/gestures.md:17 +msgid "[Delete note](#delete-note)" +msgstr "" + +#: src/gestures.md:18 +msgid "[Play media](#play-media)" +msgstr "" + +#: src/gestures.md:19 +msgid "[Abort learning](#abort-learning)" +msgstr "" + +#: src/gestures.md:20 +msgid "[Bury note](#bury-note)" +msgstr "" + +#: src/gestures.md:21 +msgid "[Suspend note](#suspend-note)" +msgstr "" + +#: src/gestures.md:22 +msgid "[Toggle Red Flag](#toggle-red-flag)" +msgstr "" + +#: src/gestures.md:23 +msgid "[Toggle Orange Flag](#toggle-orange-flag)" +msgstr "" + +#: src/gestures.md:24 +msgid "[Toggle Green Flag](#toggle-green-flag)" +msgstr "" + +#: src/gestures.md:25 +msgid "[Toggle Blue Flag](#toggle-blue-flag)" +msgstr "" + +#: src/gestures.md:26 +msgid "[Remove Flag](#remove-flag)" +msgstr "" + +#: src/gestures.md:27 +msgid "[Advanced](#advanced)" +msgstr "" + +#: src/gestures.md:28 +msgid "[Collection path](#collection-path)" +msgstr "" + +#: src/gestures.md:29 +msgid "[Force full sync](#force-full-sync)" +msgstr "" + +#: src/gestures.md:30 +msgid "[Advanced Statistics](#advanced-statistics)" +msgstr "" + +#: src/gestures.md:31 +msgid "[Workarounds](#workarounds)" +msgstr "" + +#: src/gestures.md:32 +msgid "[Type answer into the card](#type-answer-into-the-card)" +msgstr "" + +#: src/gestures.md:33 +msgid "[Input Workaround](#input-workaround)" +msgstr "" + +#: src/gestures.md:34 +msgid "[Longclick Workaround](#longclick-workaround)" +msgstr "" + +#: src/gestures.md:35 +msgid "[Fix for Hebrew Vowels](#fix-for-hebrew-vowels)" +msgstr "" + +#: src/gestures.md:36 +msgid "[Text to Speech](#text-to-speech)" +msgstr "" + +#: src/gestures.md:37 +msgid "[Lookup Dictionary](#lookup-dictionary)" +msgstr "" + +#: src/gestures.md:38 +msgid "[Reset Languages](#reset-languages)" +msgstr "" + +#: src/gestures.md:39 +msgid "[eReader (up/down buttons)](#ereader-updown-buttons)" +msgstr "" + +#: src/gestures.md:40 +msgid "[eReader Double Scrolling](#ereader-double-scrolling)" +msgstr "" + +#: src/gestures.md:42 +msgid "AnkiDroid allows you to customize the interface, so that actions you perform frequently can be accomplished quickly by using tap and swipe gestures." +msgstr "" + +#: src/gestures.md:45 +msgid "Actions" +msgstr "" + +#: src/gestures.md:46 +msgid "The following gestures can be used:" +msgstr "" + +#: src/gestures.md:48 +msgid "Swipe up" +msgstr "" + +#: src/gestures.md:49 +msgid "Swipe down" +msgstr "" + +#: src/gestures.md:50 +msgid "Swipe left" +msgstr "" + +#: src/gestures.md:51 +msgid "Swipe right" +msgstr "" + +#: src/gestures.md:52 +msgid "Double touch" +msgstr "" + +#: src/gestures.md:53 +msgid "Touch top" +msgstr "" + +#: src/gestures.md:54 +msgid "Touch bottom" +msgstr "" + +#: src/gestures.md:55 +msgid "Touch left" +msgstr "" + +#: src/gestures.md:56 +msgid "Tough right" +msgstr "" + +#: src/gestures.md:58 +msgid "The following actions are available for each gesture:" +msgstr "" + +#: src/gestures.md:60 +msgid "No action" +msgstr "" + +#: src/gestures.md:61 +msgid "Don't do anything. Useful if you want to disable certain swipes, tap zones and so on." +msgstr "" + +#: src/gestures.md:63 +msgid "Answer button 1" +msgstr "" + +#: src/gestures.md:64 +msgid "When the answer screen is shown, choose the red button, indicating you wish to review the card again soon. This is useful when you forgot a card or wish to review it more frequently. When the question is shown, this action (and all other answer actions below) will simply show the answer." +msgstr "" + +#: src/gestures.md:69 +msgid "Answer button 2" +msgstr "" + +#: src/gestures.md:70 +msgid "When the answer screen is shown, choose the second button from the left, generally indicating you found the card hard to remember." +msgstr "" + +#: src/gestures.md:73 +msgid "Answer button 3" +msgstr "" + +#: src/gestures.md:74 +msgid "When the answer screen is shown, choose the third button from the left." +msgstr "" + +#: src/gestures.md:76 +msgid "Answer button 4" +msgstr "" + +#: src/gestures.md:77 +msgid "When the answer screen is shown, choose the fourth button from the left (when applicable)." +msgstr "" + +#: src/gestures.md:79 +msgid "Answer recommended (green)" +msgstr "" + +#: src/gestures.md:80 +msgid "When the answer screen is shown, choose the green button. This is the button you should end up using the most." +msgstr "" + +#: src/gestures.md:83 +msgid "Answer better than recommended" +msgstr "" + +#: src/gestures.md:84 +msgid "When the answer screen is shown, choose the button on the right, indicating you found the card too easy to remember and would like a much longer delay." +msgstr "" + +#: src/gestures.md:89 +msgid "Undoes the last action." +msgstr "" + +#: src/gestures.md:91 +msgid "Edit card" +msgstr "" + +#: src/gestures.md:92 +msgid "Edits the current card." +msgstr "" + +#: src/gestures.md:94 +msgid "Mark" +msgstr "" + +#: src/gestures.md:95 +msgid "Adds a tag called **Marked** the current note, so it can be easily found in a search." +msgstr "" + +#: src/gestures.md:97 +msgid "Lookup expression" +msgstr "" + +#: src/gestures.md:98 +msgid "When the lookup feature is enabled (in advanced settings), lookup an expression in the selected dictionary. Note: the expression needs to be copied to the clipboard before this action will work." +msgstr "" + +#: src/gestures.md:101 +msgid "Bury card" +msgstr "" + +#: src/gestures.md:102 +msgid "Hides the current card from review." +msgstr "" + +#: src/gestures.md:104 +msgid "Suspend card" +msgstr "" + +#: src/gestures.md:105 +msgid "Prevent current card from being shown during review until you unsuspend it via the card browser." +msgstr "" + +#: src/gestures.md:108 +msgid "Deletes the currently shown note and all of its cards." +msgstr "" + +#: src/gestures.md:110 +msgid "Play media" +msgstr "" + +#: src/gestures.md:111 +msgid "Replay any audio on the card." +msgstr "" + +#: src/gestures.md:113 +msgid "Abort learning" +msgstr "" + +#: src/gestures.md:114 +msgid "Stop reviewing and go back to the deck overview page." +msgstr "" + +#: src/gestures.md:116 +msgid "Bury note" +msgstr "" + +#: src/gestures.md:117 +msgid "Bury the current note (i.e. hide it until the next day)." +msgstr "" + +#: src/gestures.md:119 +msgid "Suspend note" +msgstr "" + +#: src/gestures.md:120 +msgid "Suspend the current note (i.e. hide it until you unsuspend it)." +msgstr "" + +#: src/gestures.md:122 +msgid "Toggle Red Flag" +msgstr "" + +#: src/gestures.md:123 +msgid "Enables the red flag, unless the flag is already red, in which case the flag is disabled." +msgstr "" + +#: src/gestures.md:125 +msgid "Toggle Orange Flag" +msgstr "" + +#: src/gestures.md:126 +msgid "Enables the orange flag, unless the flag is already orange, in which case the flag is disabled." +msgstr "" + +#: src/gestures.md:128 +msgid "Toggle Green Flag" +msgstr "" + +#: src/gestures.md:129 +msgid "Enables the green flag, unless the flag is already green, in which case the flag is disabled." +msgstr "" + +#: src/gestures.md:131 +msgid "Toggle Blue Flag" +msgstr "" + +#: src/gestures.md:132 +msgid "Enables the blue flag, unless the flag is already blue, in which case the flag is disabled." +msgstr "" + +#: src/gestures.md:134 +msgid "Remove Flag" +msgstr "" + +#: src/gestures.md:135 +msgid "Removes the flag from the card." +msgstr "" + +#: src/gestures.md:137 +msgid "Advanced" +msgstr "" + +#: src/gestures.md:138 +msgid "Some less common features for advanced users are shown here" +msgstr "" + +#: src/gestures.md:140 +msgid "Collection path" +msgstr "" + +#: src/gestures.md:141 +msgid "Change the location where AnkiDroid's data is stored (not recommended)" +msgstr "" + +#: src/gestures.md:143 +msgid "Force full sync" +msgstr "" + +#: src/gestures.md:144 +msgid "Tap this item to force a full upload or download on the next sync (for example, because you accidentally deleted a deck on one side and want to restore the deck rather than having its deletion synchronized)." +msgstr "" + +#: src/gestures.md:147 +msgid "Take into account the effect of future reviews in the **Forecast** graph. More info [here](advanced-features/advanced-statistics.md)." +msgstr "" + +#: src/gestures.md:149 +msgid "Workarounds" +msgstr "" + +#: src/gestures.md:151 +msgid "Type answer into the card" +msgstr "" + +#: src/gestures.md:153 +msgid "If you have set up your cards to ask you to type in the answer (as explained in [this section of the desktop manual](https://docs.ankiweb.net/templates/intro.html)), AnkiDroid will display a keyboard on such cards and allow you to check your answer." +msgstr "" + +#: src/gestures.md:155 +msgid "In order to improve user experience when working with the whiteboard and gestures, we use a typing box separate from the card, which is inconsistent with the way the feature works on Anki Desktop." +msgstr "" + +#: src/gestures.md:157 +msgid "For full consistency with Anki Desktop, you can enable this option which allows you to save screen area, and choose an appropriate font (e.g. Japanese vs Chinese) for the input box." +msgstr "" + +#: src/gestures.md:159 +msgid "Input Workaround" +msgstr "" + +#: src/gestures.md:160 +msgid "Some older devices couldn't gain focus into the text input box for typed-answer fields, so this was added (Hidden for API > 14)." +msgstr "" + +#: src/gestures.md:162 +msgid "Longclick Workaround" +msgstr "" + +#: src/gestures.md:163 +msgid "Some older devices couldn't detect longclick for initiating selecting/copying of text, so this was added (Hidden for API > 10)." +msgstr "" + +#: src/gestures.md:165 +msgid "Fix for Hebrew Vowels" +msgstr "" + +#: src/gestures.md:166 +msgid "Some older devices couldn't render Hebrew text, so this feature was added which allows the user to download and install a Hebrew font which is known to work (Hidden for API > 15)." +msgstr "" + +#: src/gestures.md:168 +msgid "Text to Speech" +msgstr "" + +#: src/gestures.md:169 +msgid "Enable this option to have Android read out all the text on your flashcards using the default text to speech engine. Google's built-in TTS engine should work; 3rd party TTS engines may or may not. AnkiDroid will ask you to select the language for the front and back of your cards once for each deck on the first time you review a card in that deck. To change the language or disable TTS for a given deck after making your initial choice, you'll need to use the **reset languages** option described below and reconfigure for each deck." +msgstr "" + +#: src/gestures.md:173 +msgid "Alternatively, if you want only fragments of cards to be read aloud, or if you want to set the TTS language for multiple decks at once, you can insert `` tags into [card templates](advanced-features/customizing-card-layout.md). For example, with the following template for the back of the card" +msgstr "" + +#: src/gestures.md:178 +msgid "answer" +msgstr "" + +#: src/gestures.md:180 src/gestures.md:194 +msgid "\"android\"" +msgstr "" + +#: src/gestures.md:180 src/gestures.md:194 +msgid "\"en_GB\"" +msgstr "" + +#: src/gestures.md:185 +msgid "only the `EnglishTranslation` field will be read aloud in a British English voice; the `Example` field, lying outside the `` tag, won't be read aloud. Every `` tag needs to have the following two attributes:" +msgstr "" + +#: src/gestures.md:187 +msgid "**`service`**: should be set to **`android`**, otherwise the contents of the **``** tag won't be read aloud;" +msgstr "" + +#: src/gestures.md:188 +msgid "**`voice`**: used to select the TTS language; should be a [two- or three- letter language code](https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes), optionally followed by an underscore and a [two-letter country or region code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2). A frequently updated list of languages supported by the Google TTS engine can be found on its [Wikipedia page](https://en.wikipedia.org/wiki/Google_Text-to-Speech)." +msgstr "" + +#: src/gestures.md:190 +msgid "To make both AnkiDroid and the [AwesomeTTS](https://ankiatts.appspot.com) plugin to the desktop application use a TTS engine to read aloud certain card fragments, put the `` tag inside the `` tag recognised by AwesomeTTS, or vice versa. An example:" +msgstr "" + +#: src/gestures.md:193 +msgid "\"sapi5js\"" +msgstr "" + +#: src/gestures.md:193 +msgid "\"39\"" +msgstr "" + +#: src/gestures.md:193 src/gestures.md:193 +msgid "\"0\"" +msgstr "" + +#: src/gestures.md:193 +msgid "\"Microsoft David Desktop\"" +msgstr "" + +#: src/gestures.md:193 +msgid "\"100\"" +msgstr "" + +#: src/gestures.md:200 +msgid "AnkiDroid automatically ignores `` tags selecting an unknown TTS service. In contrast, AwesomeTTS may display a warning message on encountering the `` tag; to suppress it, uncheck the two _Show errors_ checkboxes on the _Playback_ tab of the _AwesomeTTS: Configuration_ dialog in the desktop application." +msgstr "" + +#: src/gestures.md:202 +msgid "_This feature may be removed in the future in favor of a separately downloadable plugin._" +msgstr "" + +#: src/gestures.md:204 +msgid "Lookup Dictionary" +msgstr "" + +#: src/gestures.md:205 +msgid "Dictionary to use to lookup words copied to the clipboard in the reviewer. After setting up a dictionary, do the following to perform the lookup:" +msgstr "" + +#: src/gestures.md:207 +msgid "Longclick on the text you want to copy in the reviewer" +msgstr "" + +#: src/gestures.md:208 +msgid "After selecting the word you want to copy, press the **copy** icon in the app bar at the top of the screen" +msgstr "" + +#: src/gestures.md:209 +msgid "Tap once anywhere on the flashcard" +msgstr "" + +#: src/gestures.md:210 +msgid "A magnifying glass icon should appear, which performs the lookup when clicked" +msgstr "" + +#: src/gestures.md:212 +msgid "Alternatively, the lookup action can be performed via a gesture." +msgstr "" + +#: src/gestures.md:214 src/gestures.md:222 +msgid "_This feature will likely be removed in the future in favor of a plugin_" +msgstr "" + +#: src/gestures.md:216 +msgid "Reset Languages" +msgstr "" + +#: src/gestures.md:217 +msgid "Useful for resetting the TTS language" +msgstr "" + +#: src/gestures.md:219 +msgid "eReader (up/down buttons)" +msgstr "" + +#: src/gestures.md:220 +msgid "Support for eReader hardware buttons (see [issue 1625](https://github.com/ankidroid/Anki-Android/issues/1625))" +msgstr "" + +#: src/gestures.md:224 +msgid "eReader Double Scrolling" +msgstr "" + +#: src/gestures.md:225 +msgid "Double the scrolling distance when using the eReader hardware buttons" +msgstr "" + +#: src/note-formatting-toolbar.md:3 +msgid "The note formatting toolbar contains basic text formatting buttons (Bold, Italic, Underline, Horizontal Line, Insert Title, Change Font Size, [Insert MathJax](advanced-features/mathjax.md) and Insert Cloze Deletion)." +msgstr "" + +#: src/note-formatting-toolbar.md:5 +msgid "It also allows the addition of user-defined toolbar buttons using HTML. HTML is a powerful language allowing nearly endless customization of your cards. [Our wiki](https://github.com/ankidroid/Anki-Android/wiki/Note-Editor-Toolbar-HTML-Samples) contains common code samples to get you started." +msgstr "" + +#: src/note-formatting-toolbar.md:7 +msgid "A user-defined toolbar button can be removed by long pressing the button and selecting **Delete**." +msgstr "" + +#: src/keyboard-shortcuts.md:3 +msgid "Home Screen" +msgstr "" + +#: src/keyboard-shortcuts.md:5 src/keyboard-shortcuts.md:13 +#: src/keyboard-shortcuts.md:32 src/keyboard-shortcuts.md:53 +#: src/keyboard-shortcuts.md:64 +msgid "Shortcut" +msgstr "" + +#: src/keyboard-shortcuts.md:5 src/keyboard-shortcuts.md:13 +#: src/keyboard-shortcuts.md:32 src/keyboard-shortcuts.md:53 +#: src/keyboard-shortcuts.md:64 +msgid "Purpose" +msgstr "" + +#: src/keyboard-shortcuts.md:7 src/keyboard-shortcuts.md:55 +msgid "A" +msgstr "" + +#: src/keyboard-shortcuts.md:7 +msgid "Add Note" +msgstr "" + +#: src/keyboard-shortcuts.md:8 src/keyboard-shortcuts.md:40 +msgid "B" +msgstr "" + +#: src/keyboard-shortcuts.md:9 +msgid "Y" +msgstr "" + +#: src/keyboard-shortcuts.md:9 +msgid "Sync" +msgstr "" + +#: src/keyboard-shortcuts.md:11 +msgid "Reviewer" +msgstr "" + +#: src/keyboard-shortcuts.md:15 src/keyboard-shortcuts.md:49 +msgid "1" +msgstr "" + +#: src/keyboard-shortcuts.md:15 src/keyboard-shortcuts.md:15 +#: src/keyboard-shortcuts.md:15 src/keyboard-shortcuts.md:20 +#: src/keyboard-shortcuts.md:27 +msgid "," +msgstr "" + +#: src/keyboard-shortcuts.md:15 +msgid "2" +msgstr "" + +#: src/keyboard-shortcuts.md:15 +msgid "3" +msgstr "" + +#: src/keyboard-shortcuts.md:15 +msgid "4" +msgstr "" + +#: src/keyboard-shortcuts.md:15 +msgid "Press the nth answer button" +msgstr "" + +#: src/keyboard-shortcuts.md:16 +msgid "Gamepad Y" +msgstr "" + +#: src/keyboard-shortcuts.md:16 +msgid "Flip Card/Press the first answer button" +msgstr "" + +#: src/keyboard-shortcuts.md:17 +msgid "Gamepad X" +msgstr "" + +#: src/keyboard-shortcuts.md:17 +msgid "Flip Card/Press the second answer button" +msgstr "" + +#: src/keyboard-shortcuts.md:18 +msgid "Gamepad B" +msgstr "" + +#: src/keyboard-shortcuts.md:18 +msgid "Flip Card/Press the third answer button" +msgstr "" + +#: src/keyboard-shortcuts.md:19 +msgid "Gamepad A" +msgstr "" + +#: src/keyboard-shortcuts.md:19 +msgid "Flip Card/Press the fourth answer button" +msgstr "" + +#: src/keyboard-shortcuts.md:20 +msgid "Space" +msgstr "" + +#: src/keyboard-shortcuts.md:20 src/keyboard-shortcuts.md:34 +msgid "Enter" +msgstr "" + +#: src/keyboard-shortcuts.md:20 +msgid "Flip Card/Answer Good" +msgstr "" + +#: src/keyboard-shortcuts.md:21 +msgid "e" +msgstr "" + +#: src/keyboard-shortcuts.md:21 src/keyboard-shortcuts.md:56 +msgid "Edit Note" +msgstr "" + +#: src/keyboard-shortcuts.md:22 +msgid "\\*" +msgstr "" + +#: src/keyboard-shortcuts.md:22 src/keyboard-shortcuts.md:58 +msgid "Mark Note" +msgstr "" + +#: src/keyboard-shortcuts.md:23 +msgid "\\-" +msgstr "" + +#: src/keyboard-shortcuts.md:23 +msgid "Bury Card" +msgstr "" + +#: src/keyboard-shortcuts.md:24 +msgid "=" +msgstr "" + +#: src/keyboard-shortcuts.md:24 +msgid "Bury Note" +msgstr "" + +#: src/keyboard-shortcuts.md:25 +msgid "@" +msgstr "" + +#: src/keyboard-shortcuts.md:25 +msgid "Suspend Card" +msgstr "" + +#: src/keyboard-shortcuts.md:26 +msgid "!" +msgstr "" + +#: src/keyboard-shortcuts.md:26 +msgid "Suspend Note" +msgstr "" + +#: src/keyboard-shortcuts.md:27 +msgid "r" +msgstr "" + +#: src/keyboard-shortcuts.md:27 +msgid "F5" +msgstr "" + +#: src/keyboard-shortcuts.md:27 +msgid "Replay Media" +msgstr "" + +#: src/keyboard-shortcuts.md:28 +msgid "z" +msgstr "" + +#: src/keyboard-shortcuts.md:30 +msgid "Note Editor" +msgstr "" + +#: src/keyboard-shortcuts.md:34 src/keyboard-shortcuts.md:39 +#: src/keyboard-shortcuts.md:40 src/keyboard-shortcuts.md:41 +#: src/keyboard-shortcuts.md:42 src/keyboard-shortcuts.md:43 +#: src/keyboard-shortcuts.md:44 src/keyboard-shortcuts.md:45 +#: src/keyboard-shortcuts.md:46 src/keyboard-shortcuts.md:47 +#: src/keyboard-shortcuts.md:48 src/keyboard-shortcuts.md:49 +#: src/keyboard-shortcuts.md:55 src/keyboard-shortcuts.md:56 +#: src/keyboard-shortcuts.md:57 src/keyboard-shortcuts.md:58 +#: src/keyboard-shortcuts.md:59 src/keyboard-shortcuts.md:66 +msgid "Ctrl" +msgstr "" + +#: src/keyboard-shortcuts.md:34 src/keyboard-shortcuts.md:39 +#: src/keyboard-shortcuts.md:40 src/keyboard-shortcuts.md:41 +#: src/keyboard-shortcuts.md:42 src/keyboard-shortcuts.md:43 +#: src/keyboard-shortcuts.md:44 src/keyboard-shortcuts.md:45 +#: src/keyboard-shortcuts.md:46 src/keyboard-shortcuts.md:47 +#: src/keyboard-shortcuts.md:47 src/keyboard-shortcuts.md:48 +#: src/keyboard-shortcuts.md:48 src/keyboard-shortcuts.md:48 +#: src/keyboard-shortcuts.md:49 src/keyboard-shortcuts.md:55 +#: src/keyboard-shortcuts.md:56 src/keyboard-shortcuts.md:57 +#: src/keyboard-shortcuts.md:58 src/keyboard-shortcuts.md:59 +#: src/keyboard-shortcuts.md:59 src/keyboard-shortcuts.md:66 +msgid "+" +msgstr "" + +#: src/keyboard-shortcuts.md:34 +msgid "Save Note" +msgstr "" + +#: src/keyboard-shortcuts.md:35 src/keyboard-shortcuts.md:57 +msgid "D" +msgstr "" + +#: src/keyboard-shortcuts.md:35 +msgid "Select Deck" +msgstr "" + +#: src/keyboard-shortcuts.md:36 +msgid "L" +msgstr "" + +#: src/keyboard-shortcuts.md:36 src/keyboard-shortcuts.md:62 +msgid "Card Template Editor" +msgstr "" + +#: src/keyboard-shortcuts.md:37 +msgid "N" +msgstr "" + +#: src/keyboard-shortcuts.md:37 +msgid "Select Note Type" +msgstr "" + +#: src/keyboard-shortcuts.md:38 +msgid "T" +msgstr "" + +#: src/keyboard-shortcuts.md:38 +msgid "Edit Tags" +msgstr "" + +#: src/keyboard-shortcuts.md:39 src/keyboard-shortcuts.md:66 +msgid "P" +msgstr "" + +#: src/keyboard-shortcuts.md:39 +msgid "Preview Note" +msgstr "" + +#: src/keyboard-shortcuts.md:40 +msgid "Bold" +msgstr "" + +#: src/keyboard-shortcuts.md:41 +msgid "I" +msgstr "" + +#: src/keyboard-shortcuts.md:41 +msgid "Italic" +msgstr "" + +#: src/keyboard-shortcuts.md:42 +msgid "U" +msgstr "" + +#: src/keyboard-shortcuts.md:42 +msgid "Underline" +msgstr "" + +#: src/keyboard-shortcuts.md:43 src/keyboard-shortcuts.md:59 +msgid "R" +msgstr "" + +#: src/keyboard-shortcuts.md:43 +msgid "Insert Horizontal Rule" +msgstr "" + +#: src/keyboard-shortcuts.md:44 +msgid "H" +msgstr "" + +#: src/keyboard-shortcuts.md:44 +msgid "Insert Title" +msgstr "" + +#: src/keyboard-shortcuts.md:45 +msgid "F" +msgstr "" + +#: src/keyboard-shortcuts.md:45 +msgid "Change Font Size" +msgstr "" + +#: src/keyboard-shortcuts.md:46 +msgid "M" +msgstr "" + +#: src/keyboard-shortcuts.md:46 +msgid "Insert MathJax Equation" +msgstr "" + +#: src/keyboard-shortcuts.md:47 src/keyboard-shortcuts.md:48 +msgid "Shift" +msgstr "" + +#: src/keyboard-shortcuts.md:47 src/keyboard-shortcuts.md:48 +msgid "C" +msgstr "" + +#: src/keyboard-shortcuts.md:47 +msgid "Insert New Cloze Deletion" +msgstr "" + +#: src/keyboard-shortcuts.md:48 src/keyboard-shortcuts.md:59 +msgid "Alt" +msgstr "" + +#: src/keyboard-shortcuts.md:48 +msgid "Insert Cloze Deletion using existing number" +msgstr "" + +#: src/keyboard-shortcuts.md:49 +msgid ".." +msgstr "" + +#: src/keyboard-shortcuts.md:49 +msgid "0" +msgstr "" + +#: src/keyboard-shortcuts.md:49 +msgid "Insert User-Defined HTML" +msgstr "" + +#: src/keyboard-shortcuts.md:55 +msgid "Select All" +msgstr "" + +#: src/keyboard-shortcuts.md:56 +msgid "E" +msgstr "" + +#: src/keyboard-shortcuts.md:57 +msgid "Change Deck" +msgstr "" + +#: src/keyboard-shortcuts.md:58 +msgid "K" +msgstr "" + +#: src/keyboard-shortcuts.md:66 +msgid "Preview Changed" +msgstr "" + +#: src/rtl.md:3 +msgid "Anki and AnkiDroid have full support for RTL languages such as Arabic, Hebrew, and Persian." +msgstr "" + +#: src/rtl.md:5 +msgid "Editing Fields as RTL" +msgstr "" + +#: src/rtl.md:6 +msgid "Fields can be marked as RTL (currently possible only from Anki Desktop) for RTL editing. When a field is marked as RTL, then the text is right-aligned in editing fields and punctuation is correctly displayed at the end (left) of sentences. Text that contains blocks of LTR characters will be properly displayed as well, with the beginning of the sentence appearing to the right of the LTR block and the end of the sentence being displayed to the left of the LTR block." +msgstr "" + +#: src/rtl.md:8 +msgid "Directionality is especially important for editing and creating RTL cloze deletions as the cloze format includes both neutral and LTR markup characters. Therefore it is recommended to use a separate note type for LTR cloze deletions and RTL cloze deletions." +msgstr "" + +#: src/rtl.md:10 +msgid "Displaying Fields as RTL during study" +msgstr "" + +#: src/rtl.md:11 +msgid "To display a field as RTL, with proper right-alignment and directionality (punctuation at left of sentences, proper flow around LTR blocks), the field should be wrapped in a div or span element with the RTL directionality specified:" +msgstr "" + +#: src/rtl.md:14 +msgid "\"rtl\"" +msgstr "" + +#: src/anki-desktop.md:3 +msgid "[Via Cloud Sync](#via-cloud-sync)" +msgstr "" + +#: src/anki-desktop.md:4 +msgid "[Sync existing decks into a new AnkiDroid install](#sync-existing-decks-into-a-new-ankidroid-install)" +msgstr "" + +#: src/anki-desktop.md:5 +msgid "[Sync from AnkiDroid to Computer](#sync-from-ankidroid-to-computer)" +msgstr "" + +#: src/anki-desktop.md:7 +msgid "Anki has a free cloud synchronization service called AnkiWeb that makes it easy to keep your card decks in sync between mobile devices and your computer. If you cannot use sync for some reason, it's also possible to use USB, though this method is more laborious." +msgstr "" + +#: src/anki-desktop.md:9 +msgid "Note that AnkiDroid is not affiliated with Anki Desktop or AnkiWeb. AnkiDroid is based on Anki Desktop but it is developed by an entirely separate community of volunteers." +msgstr "" + +#: src/anki-desktop.md:11 +msgid "![AnkiDesktop.png](img/AnkiDesktop.png)" +msgstr "" + +#: src/anki-desktop.md:13 +msgid "Via Cloud Sync" +msgstr "" + +#: src/anki-desktop.md:14 +msgid "Before you can use AnkiWeb, you'll first need to create an account by visiting [https://ankiweb.net](https://ankiweb.net) and clicking the **Sign Up** button. If you have used AnkiWeb in the past, you can skip this step. After signing up, see the corresponding instructions below, depending on whether you are trying to get your existing decks into AnkiDroid or out of AnkiDroid." +msgstr "" + +#: src/anki-desktop.md:16 +msgid "Sync existing decks into a new AnkiDroid install" +msgstr "" + +#: src/anki-desktop.md:17 +msgid "In this scenario you have some existing Anki decks that you want to copy into a new install of AnkiDroid by syncing with AnkiWeb. Open the Anki client with your existing decks (usually this would be Anki desktop, but it could also mean a version of AnkiDroid you have been using on another device), and click the synchronization button (which has two arrows in a circle) at the top right of the deck list." +msgstr "" + +#: src/anki-desktop.md:19 +msgid "If you have never used AnkiWeb before you will need to enter your credentials if prompted, and then press the **Upload to AnkiWeb** button to confirm overwriting the empty collection on AnkiWeb with your existing decks in Anki. Anki will upload all your cards, images and audio to AnkiWeb. If you have a lot of media, this may take some time." +msgstr "" + +#: src/anki-desktop.md:21 +msgid "Once the synchronization has completed, open AnkiDroid in the device that you are trying to copy the existing decks into, and tap the **Sync** button in the app bar at the top of the main [deck list](deck-picker.md). After entering your AnkiWeb credentials, AnkiDroid will download all your cards and media, and remember your login information for next time." +msgstr "" + +#: src/anki-desktop.md:24 +msgid "Note that if you have any existing material in AnkiDroid before attempting to sync, you may be shown a message asking you to choose to either download from AnkiWeb, or upload to AnkiWeb. If you are happy to lose the cards in AnkiDroid then simply choose **Download**. If you need to merge the existing cards with AnkiDroid then you should see the [resolving conflicts](ankiweb-conflicts.md#dealing-with-merge-conflicts-on-ankiweb) section before continuing." +msgstr "" + +#: src/anki-desktop.md:26 +msgid "After the first synchronization has completed, you can click the sync button again any time you wish to synchronize your changes to the cloud. Only changes made since the previous sync will be sent, so subsequent syncs are a lot faster." +msgstr "" + +#: src/anki-desktop.md:28 +msgid "If you add some new cards on the desktop computer and want to sync them to AnkiDroid, you'd repeat the same basic process: sync on desktop (or close the program, as it syncs automatically on close by default), and then tap the sync button on AnkiDroid." +msgstr "" + +#: src/anki-desktop.md:30 +msgid "Sync from AnkiDroid to Computer" +msgstr "" + +#: src/anki-desktop.md:31 +msgid "The process of syncing from AnkiDroid to computer is essentially the same as syncing from computer to AnkiDroid, but in reverse." +msgstr "" + +#: src/anki-desktop.md:33 +msgid "From the [deck list](deck-picker.md), tap the sync button in the top right (it has two arrows in a circle). If it's your first time using AnkiWeb, you may need to enter your login credentials, and then press the \"upload\" button to upload your AnkiDroid collection to AnkiWeb." +msgstr "" + +#: src/anki-desktop.md:35 +msgid "Once the synchronization has completed, open Anki Desktop on your computer and press the sync button there (with two arrows in a circle), and Anki will download your collection." +msgstr "" + +#: src/ankiweb-conflicts.md:2 +msgid "Although it should not happen often, occasionally you may end up in the position where your cards on AnkiDroid can not be automatically merged with the cards on AnkiWeb. In this case it's necessary to choose to either upload to or download from AnkiWeb, which would overwrite any changes on the other side. " +msgstr "" + +#: src/ankiweb-conflicts.md:4 +msgid "If you have new cards on both sides which you want to keep, before syncing you can [export a deck package](exporting.md) for each deck containing new cards from AnkiDroid, then when you do the sync choose **download** to download from AnkiWeb. After the synchronization has completed, you can import the decks you previously exported from AnkiDroid, as per the [importing section](importing/importing-anki-files.md)." +msgstr "" + +#: src/ankiweb-conflicts.md:6 +msgid "Via USB" +msgstr "" + +#: src/ankiweb-conflicts.md:8 +msgid "If you don't have regular internet access, it's still possible to copy decks back and forth to your device, by using USB." +msgstr "" + +#: src/ankiweb-conflicts.md:10 +msgid "The USB method works by importing or exporting all your decks at once. This means that unlike syncing via AnkiWeb, you can't make changes from two locations at once and then merge them. Instead, if you wish to add cards on the desktop, you need to make sure you export the latest version of your collection from your mobile device first, or you'll end up losing any reviews done on the mobile device." +msgstr "" + +#: src/ankiweb-conflicts.md:12 +msgid "Thus the workflow you would typically use is to export your collection from your mobile device and import it into the desktop, make modifications on the desktop, and then export your collection and import it back into your mobile device." +msgstr "" + +#: src/ankiweb-conflicts.md:14 +msgid "AnkiDroid can't directly import text files. If you wish to do that, you'll need to do that with the desktop program, and then import your collection into AnkiDroid." +msgstr "" + +#: src/ankiweb-conflicts.md:16 +msgid "Copy all decks from Anki Desktop to AnkiDroid via USB" +msgstr "" + +#: src/ankiweb-conflicts.md:18 +msgid "On your computer:" +msgstr "" + +#: src/ankiweb-conflicts.md:19 +msgid "Open the desktop program." +msgstr "" + +#: src/ankiweb-conflicts.md:20 +msgid "Choose File>Export from the menu." +msgstr "" + +#: src/ankiweb-conflicts.md:21 +msgid "Click the **Export...** button. Make sure to leave **all decks** selected, as it's not possible to import individual decks into AnkiDroid. **Include scheduling information** must also remain checked." +msgstr "" + +#: src/ankiweb-conflicts.md:22 +msgid "Anki will automatically create a collection.apkg on your desktop. If the file is named something else, please see the previous step again." +msgstr "" + +#: src/ankiweb-conflicts.md:23 +msgid "Connect your Android device to your computer via the USB cable." +msgstr "" + +#: src/ankiweb-conflicts.md:24 +msgid "Open the file explorer on your computer and view the contents of your Android device." +msgstr "" + +#: src/ankiweb-conflicts.md:25 +msgid "Locate the AnkiDroid folder." +msgstr "" + +#: src/ankiweb-conflicts.md:26 +msgid "Drag the collection.apkg file from your desktop into this AnkiDroid folder." +msgstr "" + +#: src/ankiweb-conflicts.md:28 +msgid "Then in AnkiDroid:" +msgstr "" + +#: src/ankiweb-conflicts.md:29 +msgid "From the main decks screen, tap **Import file** from the menu" +msgstr "" + +#: src/ankiweb-conflicts.md:30 +msgid "Tap on **Collection** and then confirm" +msgstr "" + +#: src/ankiweb-conflicts.md:32 +msgid "Once complete, the decks on your device will have been replaced with the decks from your desktop. See the section on [importing apkg files](importing/importing-anki-files.md) for more help with importing." +msgstr "" + +#: src/ankiweb-conflicts.md:35 +msgid "Copy all decks from AnkiDroid to Anki Desktop via USB" +msgstr "" + +#: src/ankiweb-conflicts.md:37 +msgid "The process to copy your decks from AnkiDroid to Anki Desktop is essentially the same as above, but in reverse." +msgstr "" + +#: src/ankiweb-conflicts.md:38 +msgid "Start with your device disconnected from USB" +msgstr "" + +#: src/ankiweb-conflicts.md:39 +msgid "Choose **Export collection** from the main menu in the Deck Screen" +msgstr "" + +#: src/ankiweb-conflicts.md:40 +msgid "Ensure **Include scheduling information** remains checked and press **OK**" +msgstr "" + +#: src/ankiweb-conflicts.md:41 +msgid "Connect device to computer using USB" +msgstr "" + +#: src/ankiweb-conflicts.md:42 +msgid "Copy the **collection.apkg** from the path specified in the message to the desktop on your computer" +msgstr "" + +#: src/ankiweb-conflicts.md:43 +msgid "Double click on the file to import into Anki Desktop" +msgstr "" + +#: src/ankiweb-conflicts.md:45 +msgid "See the [exporting section](exporting.md) below for more detailed information on exporting from AnkiDroid." +msgstr "" + +#: src/advanced-features/intro.md:3 +msgid "[MathJax Support](mathjax.md)" +msgstr "" + +#: src/advanced-features/intro.md:4 +msgid "[Reverse Cards](reverse-cards.md)" +msgstr "" + +#: src/advanced-features/intro.md:5 +msgid "[Custom Fonts](custom-fonts.md)" +msgstr "" + +#: src/advanced-features/intro.md:6 +msgid "[Custom Card Layout](customizing-card-layout.md)" +msgstr "" + +#: src/advanced-features/intro.md:7 +msgid "[Type in the answer feature](type-in-answer.md)" +msgstr "" + +#: src/advanced-features/intro.md:8 +msgid "[Advanced Statistics](advanced-statistics.md)" +msgstr "" + +#: src/advanced-features/intro.md:9 +msgid "[Reminders](reminders.md)" +msgstr "" + +#: src/advanced-features/intro.md:10 +msgid "[Automatic Language Selection](set-language-hint.md)" +msgstr "" + +#: src/advanced-features/mathjax.md:2 +msgid "Mathjax is a modern typesetting library for math and chemistry. AnkiDroid supports Mathjax cards out of the box. Mathjax is configured to expect TeX formatting, with `\\(` and `\\)` delimiting inline equations and `\\[` and `\\]` for display equations." +msgstr "" + +#: src/advanced-features/mathjax.md:4 +msgid "To try it out, enter the following into a field:" +msgstr "" + +#: src/advanced-features/mathjax.md:10 +msgid "and preview the card." +msgstr "" + +#: src/advanced-features/mathjax.md:12 +msgid "For more details, see [Mathjax Support](https://docs.ankiweb.net/math.html#mathjax) in the Anki Manual." +msgstr "" + +#: src/advanced-features/mathjax.md:14 +msgid "[Previous workarounds](https://www.reddit.com/r/Anki/comments/ar7lxd/how_to_load_mathjax_color_extension_on_anki/egm6u5j) are no longer necessary as of AnkiDroid 2.9." +msgstr "" + +#: src/advanced-features/reverse-cards.md:3 +msgid "The Anki system has [built-in note types which allow you to review cards in both directions](https://docs.ankiweb.net/getting-started.html#note-types). When [creating new material](../adding-notes.md) in AnkiDroid, you should choose one of these note types, such as **Basic (and reversed card)**, which will automatically generate a reverse card for you." +msgstr "" + +#: src/advanced-features/reverse-cards.md:6 +msgid "![ReverseNoteType](../img/ReverseNoteType.png)" +msgstr "" + +#: src/advanced-features/reverse-cards.md:8 +msgid "If you used the wrong note type when adding your material, you can change the note type via the [edit note screen](../editing-notes.md), or you can change the note type for multiple cards at once using the browser in Anki Desktop. To do this, follow the instructions in the [syncing with Anki Desktop section](../anki-desktop.md), then in Anki Desktop open the browser, select the cards you want to change, then choose **Change note type** from the menu." +msgstr "" + +#: src/advanced-features/reverse-cards.md:11 +msgid "Alternatively, if your cards are using a custom card layout which doesn't include a reverse card, you can edit the note type to include a reverse card by following the instructions in the [reverse cards section](https://docs.ankiweb.net/templates/generation.html#reverse-cards) of the Anki Desktop user manual. While less convenient than using Anki Desktop, it is possible to edit the note type from directly within AnkiDroid as well; see the [custom card layout section](../advanced-features/customizing-card-layout.md) for more on this." +msgstr "" + +#: src/advanced-features/custom-fonts.md:3 +msgid "AnkiDroid allows you to use non-system fonts on your cards. To set them up properly, it is strongly recommended to use the official method that is used by Anki Desktop. Please see [the corresponding section in the desktop manual](https://docs.ankiweb.net/templates/styling.html#installing-fonts) for more information." +msgstr "" + +#: src/advanced-features/custom-fonts.md:5 +msgid "Alternatively, you can create a new subfolder **fonts** in the main AnkiDroid directory (i.e. the folder which contains the **backups** subfolder, specified under `Settings > Advanced > AnkiDroid directory)`, copy a compatible font file (i.e. .ttf) there, and then set this as the default font under `Settings > Fonts > Default font`. " +msgstr "" + +#: src/advanced-features/custom-fonts.md:7 +msgid "**Note:** this method will change the default font for **all** of your cards, whereas the official method can be more specific. Also, if you sync with AnkiWeb, using this method will lead to cards being displayed differently on different devices." +msgstr "" + +#: src/advanced-features/custom-fonts.md:9 +msgid "Only fonts in the ttf format are officially supported in Anki/AnkiDroid; the [Google Noto](https://fonts.google.com/noto) font set is highly recommended for all languages, and some other free fonts can be found [here](https://github.com/ankidroid/Anki-Android/wiki/Freely-distributable-fonts)." +msgstr "" + +#: src/advanced-features/custom-fonts.md:11 +msgid "Please note that AnkiDroid has to load the entire font into memory in order to use it, and fonts for Asian languages can be quite large. If you have an older device and notice AnkiDroid crashing frequently after installing a font, you may have exceeded your device's memory limits. For Google Noto, it's not recommended to use the combined CJK font, rather get the individual languages [separately from here](https://github.com/googlei18n/noto-cjk)." +msgstr "" + +#: src/advanced-features/custom-fonts.md:13 +msgid "**Note 1**: If you have **Fetch media on sync** disabled, you may need to manually copy the font file from Anki Desktop to your AnkiDroid/collection.media folder." +msgstr "" + +#: src/advanced-features/custom-fonts.md:15 +msgid "**Note 2**: If you can't get your font to work after following the steps in here and the Anki Desktop manual, please refer to the FAQ for " +msgstr "" + +#: src/advanced-features/custom-fonts.md:15 +msgid "detailed steps on how to debug font issues" +msgstr "" + +#: src/advanced-features/customizing-card-layout.md:2 +msgid "The layout of flashcards is completely customizable, although this is an advanced topic with a fairly steep learning curve, and you will probably find it a lot more convenient to do the customization with [Anki Desktop](../anki-desktop.md). " +msgstr "" + +#: src/advanced-features/customizing-card-layout.md:4 +msgid "The [card templates section](https://docs.ankiweb.net/templates/intro.html) of the Anki Desktop manual has detailed instructions on how to edit note types, and most of the actions discussed there are also available from AnkiDroid by tapping **cards** at the bottom of the note editor, or choosing the **manage note types** option in the deck picker. Since detailed information on customizing card layouts is available in the Anki desktop manual, it will not be repeated here." +msgstr "" + +#: src/advanced-features/customizing-card-layout.md:6 +msgid "There is an [advanced formatting page](https://github.com/ankidroid/Anki-Android/wiki/Advanced-formatting) on the AnkiDroid wiki with various hints on how you can get the most out of your card formatting, and we encourage you to read it, and edit it freely if you have any tips that you'd like to share with the community." +msgstr "" + +#: src/advanced-features/type-in-answer.md:3 +msgid "AnkiDroid allows you to type in the correct answer and then compare it to the right answer. You have to set this up with Anki desktop, as described in the [Anki Desktop manual](https://docs.ankiweb.net/templates/fields.html#checking-your-answer)." +msgstr "" + +#: src/advanced-features/type-in-answer.md:5 +msgid "Anki desktop replaces the **{{type:NN}}** field on the front of a card with an input box in the card. On AnkiDroid it is replaced with a **......** prompt instead, and a text input box is shown at the bottom. The comparison between typed text and the correct text is shown on the answer side in place of the **{{type:NN}}** field there, like on Anki desktop." +msgstr "" + +#: src/advanced-features/type-in-answer.md:7 +msgid "The text input box and the soft keyboard can be hidden by ticking **Disable typing in answer** in the preferences." +msgstr "" + +#: src/advanced-features/type-in-answer.md:9 +msgid "Even with typing disabled, the correct answer is shown on the answer side. This is done on purpose; otherwise the correct answer might not be shown at all." +msgstr "" + +#: src/advanced-features/type-in-answer.md:11 +msgid "To hide the comparison (e.g. because the correct answer is shown anyway), the HTML id **typeans** can be used. Add following to the [card styling](https://docs.ankiweb.net/templates/styling.html#card-styling) using Anki Desktop." +msgstr "" + +#: src/advanced-features/type-in-answer.md:19 +msgid "The type answer prompt and the comparison have more classes that can be used to change the way they are displayed. Some of these are the same as on Anki Desktop, some are specific to AnkiDroid." +msgstr "" + +#: src/advanced-features/type-in-answer.md:21 +msgid "The comparison uses three classes, typeGood, typeBad and typeMissed to add green, red and gray background to the typing comparison. These three classes are used on Anki desktop as well." +msgstr "" + +#: src/advanced-features/type-in-answer.md:23 +msgid "The **......** prompt has the class **typePrompt**." +msgstr "" + +#: src/advanced-features/type-in-answer.md:25 +msgid "When typing is set to off in the preferences, the class **typeOff** is added to the prompt on the question side, and to the div element containing the comparison on the answer side. This class can be used to show the type prompt or to hide the typing comparison in this case." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:3 +msgid "If Advanced Statistics are enabled, it changes the **Forecast** graph so that it shows the estimated number of reviews that will be due on a given day in the future taking into account future reviews, learning new cards and failing cards. The bars and the left axis show the number of cards due on each day if you study all cards each day, while the line and the right axis show the number of unseen (shown as **learn**), young and mature cards your deck or collection will consist of if you study all cards each day. The forecast graph does count reviews that are currently overdue. It assumes that the overdue cards will be reviewed according to the **maximum reviews/day** deck option." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:5 +msgid "Advanced Statistics can be enabled in `Settings -> Advanced -> Advanced Statistics` (in plugin section)." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:7 +msgid "The outcome of future reviewing, learning or failing cards affects reviews after that future review. To take this into account, the probability of each outcome is computed from the review log. Then the outcome is randomly chosen, such that an outcome which is more likely according to the review log is more likely to be chosen than an outcome which is less likely according to the review log. The settings all affect how the effect of the outcome of future reviews on subsequent reviews is taken into account." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:9 +msgid "Compute first n days, simulate remainder" +msgstr "" + +#: src/advanced-features/advanced-statistics.md:10 +msgid "If this setting is set to a number greater than 0, instead of randomly choosing an outcome, each possible outcome is taken into account in the simulation, together with its probability. The probability is taken into account for the graph and for future reviews in which it results, which also affect the graph. One review has a couple of possible outcomes (say 4), which all result in a review. That review also has a couple of possible outcomes and so on. If many reviews are simulated this way, many reviews (4 x 4 x 4 x ... ) have to be taken into account which increases the time it takes to compose the graph. Therefore, for reviews later than n days from now are simulated by randomly choosing an outcome." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:14 +msgid "In summary, higher n gives a more accurate graph, but it takes more time to compose the graph." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:16 +msgid "Precision of computation" +msgstr "" + +#: src/advanced-features/advanced-statistics.md:18 +msgid "Reviews which occur with a probability smaller than 100% minus the configured precision of the computation are simulated by randomly choosing an outcome rather than taking into account each possible outcome. This setting is only applicable if the first n days are computed. If Advanced Statistics are disabled, the **Forecast** graph shows the estimated number of reviews that will be due on a given day in the future if you do not review cards, learn no new cards and fail no cards." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:21 +msgid "In summary, higher precision gives a more accurate graph, but it takes more time to compose the graph." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:23 +msgid "Number of iterations of the simulation" +msgstr "" + +#: src/advanced-features/advanced-statistics.md:24 +msgid "Composes the graph several times and then displays the average of these graphs. Each time the graph is composed, another outcome might be randomly chosen. If we average many outcomes which are randomly chosen taking into account the probabilities from the review log, the average outcome will likely be close to the average of the probabilities from the review log. If we average many graphs, the average graph will likely be close to the graph which is generated by taking into account all possible outcomes. If the number of graphs which are averaged is not too high, it will be faster than taking into account all possible outcomes." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:29 +msgid "In summary, a higher number of iterations gives a more accurate graph, but it takes more time to compose the graph." +msgstr "" + +#: src/advanced-features/reminders.md:2 +msgid "AnkiDroid can remind you to devote some time to reviewing cards every day at a specific time via Android's notification framework. You can configure reminders for each options group independently. To configure a notification go to Deck options > Reminders, then tick the checkbox and select the time you want to be notified at. To stop receiving notifications go to Deck options > Reminders and unmark the checkbox." +msgstr "" + +#: src/advanced-features/reminders.md:7 +msgid "Notifications only work for top level decks. Please let us know if you want us to add notifications for subdecks too." +msgstr "" + +#: src/advanced-features/set-language-hint.md:2 +msgid "AnkiDroid has an in Automatic Language Selection feature in the Note Editor starting with AnkiDroid 2.13. This feature allows you to define a default language to be used in your keyboard for a field in a note type." +msgstr "" + +#: src/advanced-features/set-language-hint.md:5 +msgid "For example, if you have Russian and English note fields, and your keyboard supports the setImeHintLocales Android API, the keyboard layout will switch to Russian in the first field and back to English in the second automatically when the fields get focus. [Checkout video reference for demonstration](https://www.youtube.com/watch?v=JrxDjTrRhBE)" +msgstr "" + +#: src/help.md:1 +msgid "Help & Support" +msgstr "" + +#: src/help.md:3 +msgid "Before Asking" +msgstr "" + +#: src/help.md:5 +msgid "Before asking for help, please try searching through the [AnkiDroid Manual](intro.md), the list of [Frequently Asked Questions](https://github.com/ankidroid/Anki-Android/wiki/FAQ), and also the main [Anki Manual](https://docs.ankiweb.net) for general help with the Anki system and features, and any issues not limited to Android." +msgstr "" + +#: src/help.md:7 +msgid "Support" +msgstr "" + +#: src/help.md:8 +msgid "If you were unable to find what you needed in the documentation above, please visit the relevant site below:" +msgstr "" + +#: src/help.md:10 +msgid "Non-Android-Specific Issues" +msgstr "" + +#: src/help.md:11 +msgid "AnkiDroid (the Android version of Anki) is created and managed independently from other Anki versions. For the PC / Web / iOS versions, and general Anki issues that are not limited to Android, please visit the main [Anki support site](https://forums.ankiweb.net)." +msgstr "" + +#: src/help.md:13 +msgid "AnkiDroid Questions" +msgstr "" + +#: src/help.md:14 +msgid "For questions and help concerning AnkiDroid, please visit the [user forum](https://groups.google.com/g/anki-android), or you can send your questions to the forum's [public email address](mailto:public-forum@ankidroid.org) if you don't want to register on the forum." +msgstr "" + +#: src/help.md:16 +msgid "Bug Reports and Feature Requests" +msgstr "" + +#: src/help.md:17 +msgid "For bug reports and feature requests, please search through the current list of open issues on the [AnkiDroid issue tracker](https://github.com/ankidroid/Anki-Android/issues), and if there are no existing issues, create a new issue including as much information as possible. For bug reports, please also include the output of **debug info** by following the steps below: " +msgstr "" + +#: src/help.md:20 +msgid "Open the navigation drawer by tapping the button on the top left of the screen" +msgstr "" + +#: src/help.md:21 +msgid "Tap **settings**" +msgstr "" + +#: src/help.md:22 +msgid "Tap **advanced**" +msgstr "" + +#: src/help.md:23 +msgid "Tap **about AnkiDroid** at the bottom" +msgstr "" + +#: src/help.md:24 +msgid "Tap the **copy debug info** button at the bottom (which copies **debug info** to the clipboard)" +msgstr "" + +#: src/help.md:25 +msgid "If filling out the bug report on your mobile device, paste the contents of the clipboard directly to the issue. Alternatively, you can paste the contents of the clipboard into a new email, send it to yourself, then copy and paste that into the bug report from your computer." +msgstr "" + +#: src/help.md:27 +msgid "![DebugInfo.png](img/DebugInfo.png)" +msgstr "" + +#: src/help.md:29 +msgid "**Note:** if you are unable to open the app at all, so cannot even access **settings** then please follow [these instructions](https://github.com/ankidroid/Anki-Android/wiki/Unopenable-collections)." +msgstr "" + +#: src/help.md:31 +msgid "This **debug info** is important as it allows us to match your report with our internal crash report data. " +msgstr "" + +#: src/help.md:34 +msgid "AnkiDroid is an open source project, and anyone is welcome to contribute (including non-developers)! For help with contributing to AnkiDroid, please first check the [contribution wiki page](https://github.com/ankidroid/Anki-Android/wiki/Contributing), and ask any further questions in the [main forum](https://groups.google.com/g/anki-android)." +msgstr "" + +#: src/beta-testing.md:2 +msgid "If you want to try out the latest features in AnkiDroid, you can sign up for the beta testing program as follows:" +msgstr "" + +#: src/beta-testing.md:4 +msgid "Visit the [Google Play Beta page](https://play.google.com/apps/testing/com.ichi2.anki)" +msgstr "" + +#: src/beta-testing.md:5 +msgid "Click **Become a beta tester**" +msgstr "" + +#: src/beta-testing.md:7 +msgid "After following these steps, the latest beta version will automatically be installed by Google Play in the same way as ordinary updates." +msgstr "" + +#: src/beta-testing.md:9 +msgid "If you are more adventurous, you can also become an alpha tester, by joining the [alpha testers group](https://groups.google.com/g/ankidroidalphatesters) in addition to performing the above steps for beta testing." +msgstr "" + +#: src/beta-testing.md:11 +msgid "Please submit any bugs you find in these development versions to the AnkiDroid issue tracker, as per the [main help page](help.md)." +msgstr "" + +#: src/beta-testing.md:13 +msgid "If you wish to leave the testing program at any time, simply visit the [Google Play Beta page](https://play.google.com/apps/testing/com.ichi2.anki) and click **Leave the test**." +msgstr "" + +#: src/contributing.md:3 +msgid "[Get involved](#get-involved)" +msgstr "" + +#: src/contributing.md:4 +msgid "[Translate](#translate)" +msgstr "" + +#: src/contributing.md:5 +msgid "[Develop](#develop)" +msgstr "" + +#: src/contributing.md:7 +msgid "AnkiDroid is an open source project, and its development relies on contributions from volunteers. Here are some of the ways you can contribute to the AnkiDroid project:" +msgstr "" + +#: src/contributing.md:9 +msgid "Get involved" +msgstr "" + +#: src/contributing.md:10 +msgid "Rate the app, join the [AnkiDroid forum](https://groups.google.com/g/anki-android) and answer questions for other users, submit bug reports, become a [beta tester](beta-testing.md), etc. More detailed information on ways you can contribute as a non-developer can be found on the [Wiki](https://github.com/ankidroid/Anki-Android/wiki/Contributing)." +msgstr "" + +#: src/contributing.md:12 +msgid "Translate" +msgstr "" + +#: src/contributing.md:13 +msgid "Translations of AnkiDroid and this user manual are all contributed by users, and are greatly appreciated. See the " +msgstr "" + +#: src/contributing.md:14 +msgid "translating" +msgstr "" + +#: src/contributing.md:14 +msgid " wiki page for detailed instructions on how to contribute translations." +msgstr "" + +#: src/contributing.md:16 +msgid "Develop" +msgstr "" + +#: src/contributing.md:17 +msgid "The source code for AnkiDroid is available on our main [Github page](https://github.com/ankidroid/Anki-Android), and bug fixes as well as new features are very welcome. Before investing a lot of time on working on a new feature, you may like to ask on the forum first if it's likely to be merged into the main project, as not all features will be accepted. If you are just getting started with Android programming, feel free to ask on the forum for some tips and/or tasks which are suitable for beginners." +msgstr "" + +#: src/changelog/v2.15.md:1 +msgid "Version 2.15.6 (20210714)" +msgstr "" + +#: src/changelog/v2.15.md:2 +msgid "One more crash fix, no crashes shall be left unfixed! If we can help it." +msgstr "" + +#: src/changelog/v2.15.md:4 +msgid "Version 2.15.5 (20210713)" +msgstr "" + +#: src/changelog/v2.15.md:5 +msgid "[🤜🤛 Thank you! Your support makes the fixes happen!](https://opencollective.com/ankidroid)" +msgstr "" + +#: src/changelog/v2.15.md:6 +msgid "Full-screen navigation drawer drag is a preference, default off" +msgstr "" + +#: src/changelog/v2.15.md:7 +msgid "Floating Action Button ('+') labels are clickable again" +msgstr "" + +#: src/changelog/v2.15.md:8 +msgid "Fixed crash on first run post-install on tablets" +msgstr "" + +#: src/changelog/v2.15.md:9 +msgid "Fixed odd weekly breakdown stats chart behavior" +msgstr "" + +#: src/changelog/v2.15.md:10 +msgid "Fixed crash creating new deck from deck chooser" +msgstr "" + +#: src/changelog/v2.15.md:11 +msgid "[Updated translations](https://crowdin.com/project/ankidroid) (thank you translators!)" +msgstr "" + +#: src/changelog/v2.15.md:12 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/47?closed=1)" +msgstr "" + +#: src/changelog/v2.15.md:13 +msgid "We are deep into development for v2.16 + Google Summer of Code, lots of new stuff coming" +msgstr "" + +#: src/changelog/v2.15.md:14 +msgid "Happy reviewing!" +msgstr "" + +#: src/changelog/v2.15.md:16 +msgid "Version 2.15.4 (20210602)" +msgstr "" + +#: src/changelog/v2.15.md:17 +msgid "Saw one crash show up for 2.15.3: if you touched the 3 numbers instead of the deck name on the deck list on phones, it would crash" +msgstr "" + +#: src/changelog/v2.15.md:19 +msgid "Temporarily revert full screen navigation drawer option to fix" +msgstr "" + +#: src/changelog/v2.15.md:21 +msgid "Version 2.15.3 (20210602)" +msgstr "" + +#: src/changelog/v2.15.md:22 +msgid "[❤️ Thank you so much for the donations! We appreciate it ❤️](https://opencollective.com/ankidroid)" +msgstr "" + +#: src/changelog/v2.15.md:23 +msgid "Another batch of fixes stabilizing all the work done for AnkiDroid 2.15" +msgstr "" + +#: src/changelog/v2.15.md:24 +msgid "Fix \"Search All Decks\" in Card Browser not searching" +msgstr "" + +#: src/changelog/v2.15.md:25 +msgid "Make new full screen navigation drawer open optional, default off" +msgstr "" + +#: src/changelog/v2.15.md:26 +msgid "Preserve edited search in card browser if navigation drawer opens" +msgstr "" + +#: src/changelog/v2.15.md:27 +msgid "Fix crash editing Tags dialog when switching back from another app" +msgstr "" + +#: src/changelog/v2.15.md:28 +msgid "Fix incorrect cloze help link" +msgstr "" + +#: src/changelog/v2.15.md:29 +msgid "Increase touchable area of undo icon" +msgstr "" + +#: src/changelog/v2.15.md:30 +msgid "Fix legacy / handebar template parsing" +msgstr "" + +#: src/changelog/v2.15.md:31 +msgid "Fix icon sizes for notifications and search" +msgstr "" + +#: src/changelog/v2.15.md:32 +msgid "Fix audio files incorrectly importing when attached" +msgstr "" + +#: src/changelog/v2.15.md:33 +msgid "Fix deck options \"steps\" showing up with lots of decimal places" +msgstr "" + +#: src/changelog/v2.15.md:34 +msgid "Update translations, add Kannada language" +msgstr "" + +#: src/changelog/v2.15.md:35 +msgid "Fix F-Droid app store publishing" +msgstr "" + +#: src/changelog/v2.15.md:36 +msgid "Correct navigation away from and back to Changelog" +msgstr "" + +#: src/changelog/v2.15.md:37 +msgid "Fix template parsing for \"{{FrontSide}}\"" +msgstr "" + +#: src/changelog/v2.15.md:38 +msgid "Fix stats tab view layout in RTL context" +msgstr "" + +#: src/changelog/v2.15.md:39 +msgid "Fix preview of cloze cards from note editor " +msgstr "" + +#: src/changelog/v2.15.md:40 +msgid "[Full changelog here](https://github.com/ankidroid/Anki-Android/milestone/45?closed=1)" +msgstr "" + +#: src/changelog/v2.15.md:43 +msgid "Version 2.15.2 (20210526)" +msgstr "" + +#: src/changelog/v2.15.md:44 +msgid "[❤️ Your donations here give us the time to work on the app, thank you! ❤️](https://opencollective.com/ankidroid)" +msgstr "" + +#: src/changelog/v2.15.md:45 src/changelog/v2.15.md:58 +msgid "🔥 Hot fixes for 2.15.0 issues (See below for 2.15.0 notes 👇 it was a huge release!)" +msgstr "" + +#: src/changelog/v2.15.md:46 +msgid "2.15 should have no regressions now we think 🤞 " +msgstr "" + +#: src/changelog/v2.15.md:47 +msgid "That means we'll slow down the releases and these popups now, sorry + thank you " +msgstr "" + +#: src/changelog/v2.15.md:48 +msgid "Fix another API issue breaking card add from external apps" +msgstr "" + +#: src/changelog/v2.15.md:49 +msgid "Fix conditional template issue that caused blank cards for some" +msgstr "" + +#: src/changelog/v2.15.md:50 +msgid "Fix auto-advance ignoring \"no advance\" setting if card had audio" +msgstr "" + +#: src/changelog/v2.15.md:51 +msgid "Gracefully handle corrupt collections with invalid current decks selected" +msgstr "" + +#: src/changelog/v2.15.md:52 +msgid "Publish to Amazon App Store again (go get AnkiDroid on your Fire devices!)" +msgstr "" + +#: src/changelog/v2.15.md:53 +msgid "[Issue tracker milestone here](https://github.com/ankidroid/Anki-Android/milestone/44?closed=1)" +msgstr "" + +#: src/changelog/v2.15.md:56 +msgid "Version 2.15.1 (20210525)" +msgstr "" + +#: src/changelog/v2.15.md:57 +msgid "[❤️ Your donations funded this rapid set of fixes, enjoy! ❤️](https://opencollective.com/ankidroid)" +msgstr "" + +#: src/changelog/v2.15.md:59 +msgid "Do not auto-update users to scheduler v2. Yet." +msgstr "" + +#: src/changelog/v2.15.md:60 +msgid "Fix crash on undo after deck delete" +msgstr "" + +#: src/changelog/v2.15.md:61 +msgid "Try harder to successfully paste images" +msgstr "" + +#: src/changelog/v2.15.md:62 +msgid "Reviewer performance fix - only load mathjax if needed" +msgstr "" + +#: src/changelog/v2.15.md:63 +msgid "Fixed compatibility issue for 2.15 collections on 2.14" +msgstr "" + +#: src/changelog/v2.15.md:64 +msgid "Fixed API issue breaking card add from external apps" +msgstr "" + +#: src/changelog/v2.15.md:65 +msgid "Fresh language translations. See a bad translation? [You can fix it easily!](https://crowdin.com/project/ankidroid)" +msgstr "" + +#: src/changelog/v2.15.md:66 +msgid "[Detailed issue log](https://github.com/ankidroid/Anki-Android/milestone/43?closed=1)" +msgstr "" + +#: src/changelog/v2.15.md:68 +msgid "Version 2.15.0 (20210524)" +msgstr "" + +#: src/changelog/v2.15.md:69 +msgid "[❤️ Your donations funded these features, enjoy! ❤️](https://opencollective.com/ankidroid)" +msgstr "" + +#: src/changelog/v2.15.md:70 +msgid "Thanks to [Google Summer of Code](https://github.com/ankidroid/Anki-Android/wiki/Google-Summer-of-Code-2021) students for a HUGE effort!" +msgstr "" + +#: src/changelog/v2.15.md:71 +msgid "Way too many changes to describe, but here are the highlights:" +msgstr "" + +#: src/changelog/v2.15.md:72 +msgid "New timezone code supported for sync with AnkiDesktop!" +msgstr "" + +#: src/changelog/v2.15.md:73 +msgid "Performance, stability improvements everywhere" +msgstr "" + +#: src/changelog/v2.15.md:74 +msgid "General UI improvements (accessibility, dark mode, design, more)" +msgstr "" + +#: src/changelog/v2.15.md:75 +msgid "Many new keyboard shortcuts and gesture actions" +msgstr "" + +#: src/changelog/v2.15.md:76 +msgid "Languages: Added Odia, Malayalam; big RTL support improvements!" +msgstr "" + +#: src/changelog/v2.15.md:77 +msgid "Reviewer: Javascript API: many new methods" +msgstr "" + +#: src/changelog/v2.15.md:78 +msgid "Improved account login, sync conflict, card template UI" +msgstr "" + +#: src/changelog/v2.15.md:79 +msgid "Tags and Decks dialogs have search!" +msgstr "" + +#: src/changelog/v2.15.md:80 +msgid "Whiteboard: erase, pen colors, stroke width" +msgstr "" + +#: src/changelog/v2.15.md:81 +msgid "NoteEditor: Mathjax 3, capitalize sentences setting" +msgstr "" + +#: src/changelog/v2.15.md:82 +msgid "Huge quality improvements all over codebase, helps future developers" +msgstr "" + +#: src/changelog/v2.15.md:83 +msgid "[🚧 Full 638 item changelog here! 🚧](https://github.com/ankidroid/Anki-Android/milestone/37?closed=1)" +msgstr "" + +#: src/changelog/v2.14.md:1 +msgid "Version 2.14.6 (20210309)" +msgstr "" + +#: src/changelog/v2.14.md:2 +msgid "Reviewer: fix \"my card is blank now with 2.14.5! help!\" 😱" +msgstr "" + +#: src/changelog/v2.14.md:3 +msgid "Reviewer: fix Android 8/8.1 review buttons disappear (finally?)" +msgstr "" + +#: src/changelog/v2.14.md:5 +msgid "Version 2.14.5 (20210307)" +msgstr "" + +#: src/changelog/v2.14.md:6 +msgid "We really appreciate the [donations](https://opencollective.com/ankidroid), they paid for these fixes 🤝" +msgstr "" + +#: src/changelog/v2.14.md:7 +msgid "NoteEditor: Android 11 users can crop!" +msgstr "" + +#: src/changelog/v2.14.md:8 +msgid "NoteEditor: Canceling crop twice won't delete your image" +msgstr "" + +#: src/changelog/v2.14.md:9 +msgid "DeckList: parent limits altered to match Desktop" +msgstr "" + +#: src/changelog/v2.14.md:10 +msgid "DeckList: current deck saved as correct type" +msgstr "" + +#: src/changelog/v2.14.md:11 +msgid "SchedulerV2: allow very small delays" +msgstr "" + +#: src/changelog/v2.14.md:12 +msgid "KNOWN ISSUE: [Android 8/8.1 answer buttons disappear](https://github.com/ankidroid/Anki-Android/issues/7369). Use gestures as workaround." +msgstr "" + +#: src/changelog/v2.14.md:13 +msgid "Anyone with Android 8/8.1 that reproduces this and knows how to develop Android layouts? We'd love the help!" +msgstr "" + +#: src/changelog/v2.14.md:15 +msgid "Version 2.14.4 (20210307)" +msgstr "" + +#: src/changelog/v2.14.md:16 +msgid "Re-released immediately as 2.14.5 after release script issue 🤷😅" +msgstr "" + +#: src/changelog/v2.14.md:18 +msgid "Version 2.14.3 (20210109)" +msgstr "" + +#: src/changelog/v2.14.md:19 +msgid "[The AnKing](https://www.youtube.com/c/TheAnKing) has graced us with a [new intro video](https://youtu.be/iuBU_OM9oAM)! 🤓" +msgstr "" + +#: src/changelog/v2.14.md:20 +msgid "Still happily overwhelmed by the [donations](https://opencollective.com/ankidroid) 💪" +msgstr "" + +#: src/changelog/v2.14.md:21 +msgid "Reviewer: Fix mark note keyboard shortcut" +msgstr "" + +#: src/changelog/v2.14.md:22 +msgid "NoteEditor: Fix to remove padding if removing formatting toolbar" +msgstr "" + +#: src/changelog/v2.14.md:23 +msgid "Previewer: Fix to show same card after edit" +msgstr "" + +#: src/changelog/v2.14.md:24 +msgid "Scheduler: Fix v1 scheduler completes deck when only learn cards due" +msgstr "" + +#: src/changelog/v2.14.md:26 +msgid "Version 2.14.2 (20201202)" +msgstr "" + +#: src/changelog/v2.14.md:27 +msgid "Wow! We are humbled by the [donations](https://opencollective.com/ankidroid) 🤯" +msgstr "" + +#: src/changelog/v2.14.md:28 +msgid "The resources are already going to contributors to improve the app! Thank you ❤️ " +msgstr "" + +#: src/changelog/v2.14.md:29 +msgid "Note Editor: Fix image crop not working first time" +msgstr "" + +#: src/changelog/v2.14.md:30 +msgid "Note Editor: Paste image at cursor not end" +msgstr "" + +#: src/changelog/v2.14.md:31 +msgid "Note Editor: Fix Ctrl+C opens preview" +msgstr "" + +#: src/changelog/v2.14.md:32 +msgid "Note Editor: Add menubar toggle to disable editing toolbar" +msgstr "" + +#: src/changelog/v2.14.md:33 +msgid "Home Screen: Fix Vivo device shortcut creation (again)" +msgstr "" + +#: src/changelog/v2.14.md:34 +msgid "Reviewer: Fix numeric keypad not working" +msgstr "" + +#: src/changelog/v2.14.md:35 +msgid "Note Editor: Fix cloze cards going to wrong deck" +msgstr "" + +#: src/changelog/v2.14.md:36 +msgid "Navigation Menu: Fix safe display app hang" +msgstr "" + +#: src/changelog/v2.14.md:37 +msgid "Preferences: Fix gestures menu translation / ordering issue" +msgstr "" + +#: src/changelog/v2.14.md:38 +msgid "Translations: thanks [translators!](https://crowdin.com/project/ankidroid/activity_stream) - you can help too!" +msgstr "" + +#: src/changelog/v2.14.md:39 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/39?closed=1)" +msgstr "" + +#: src/changelog/v2.14.md:41 +msgid "Version 2.14.1 (2020-11-23)" +msgstr "" + +#: src/changelog/v2.14.md:42 +msgid "Always free, always open source, but you may [donate if you like 😊](https://opencollective.com/ankidroid)" +msgstr "" + +#: src/changelog/v2.14.md:43 +msgid "Move sync button to right of action bar (vs search)" +msgstr "" + +#: src/changelog/v2.14.md:44 +msgid "Fix duplicate note detection" +msgstr "" + +#: src/changelog/v2.14.md:45 +msgid "Fix add deck shortcut on Vivo devices" +msgstr "" + +#: src/changelog/v2.14.md:46 +msgid "Fix non-translatable 'Card Info' strings" +msgstr "" + +#: src/changelog/v2.14.md:47 +msgid "Fix suspended card handling in filtered decks" +msgstr "" + +#: src/changelog/v2.14.md:48 +msgid "Sync translations from volunteers on our crowdin.com site (thank you!)" +msgstr "" + +#: src/changelog/v2.14.md:49 +msgid "Fix crash on mismatched WebView ABIs" +msgstr "" + +#: src/changelog/v2.14.md:50 +msgid "Fix crash invalid filename handling while pasting image" +msgstr "" + +#: src/changelog/v2.14.md:51 +msgid "Fix crash selecting cards in card browser" +msgstr "" + +#: src/changelog/v2.14.md:52 +msgid "Fix crash Android 8 in card browser" +msgstr "" + +#: src/changelog/v2.14.md:53 +msgid "Fix crash in undo labeling" +msgstr "" + +#: src/changelog/v2.14.md:54 +msgid "Fix crash reset password when system browser not exported" +msgstr "" + +#: src/changelog/v2.14.md:55 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/38?closed=1)" +msgstr "" + +#: src/changelog/v2.14.md:57 +msgid "Version 2.14.0 (2020-11-18)" +msgstr "" + +#: src/changelog/v2.14.md:58 +msgid "Enabled Donations - we ❤️ you, [now you can ❤️ us 😊](https://opencollective.com/ankidroid)" +msgstr "" + +#: src/changelog/v2.14.md:59 +msgid "New Screen: Card Info (from Card Browser or as a Reviewer App Bar Button)" +msgstr "" + +#: src/changelog/v2.14.md:60 +msgid "New Screen: Help - easy access to manual, many community pages/manuals, donation page, translations" +msgstr "" + +#: src/changelog/v2.14.md:61 +msgid "Home screen: Add deck shortcut" +msgstr "" + +#: src/changelog/v2.14.md:62 +msgid "Deck Options: SchedV2: Support setting \"Hard Factor\" " +msgstr "" + +#: src/changelog/v2.14.md:63 +msgid "Card Browser: Add deck filtering" +msgstr "" + +#: src/changelog/v2.14.md:64 +msgid "Card Browser: Filter By Flag" +msgstr "" + +#: src/changelog/v2.14.md:65 +msgid "Card Browser: Adding cards defaults to selected deck" +msgstr "" + +#: src/changelog/v2.14.md:66 +msgid "Card Browser: Many more keyboard shortcuts" +msgstr "" + +#: src/changelog/v2.14.md:67 +msgid "Card Browser: Display the number of cards deleted when deleting a note" +msgstr "" + +#: src/changelog/v2.14.md:68 +msgid "Card Browser: Better handling of deck searches containing wildcards" +msgstr "" + +#: src/changelog/v2.14.md:69 +msgid "Reviewer: Basic Android TV Support" +msgstr "" + +#: src/changelog/v2.14.md:70 +msgid "Reviewer: New Gesture: Abort Learning & Sync" +msgstr "" + +#: src/changelog/v2.14.md:71 +msgid "Reviewer: Support AnkiMobile 9-area gesture touch layout" +msgstr "" + +#: src/changelog/v2.14.md:72 +msgid "Reviewer: Improve \"Empty Card\" UX" +msgstr "" + +#: src/changelog/v2.14.md:73 +msgid "Reviewer: Keyboard shortcuts for flags (Ctrl+1...4)" +msgstr "" + +#: src/changelog/v2.14.md:74 +msgid "Note Editor: Editor Toolbar (& keyboard shortcuts) - hugely requested feature!" +msgstr "" + +#: src/changelog/v2.14.md:75 +msgid "Note Editor Toolbar: Apply Custom Commands (& keyboard shortcuts)" +msgstr "" + +#: src/changelog/v2.14.md:76 +msgid "Note Editor: Paste to Insert Image" +msgstr "" + +#: src/changelog/v2.14.md:77 +msgid "Note Editor: Made fields full-width" +msgstr "" + +#: src/changelog/v2.14.md:78 +msgid "Note Editor: Change Font Size for fields" +msgstr "" + +#: src/changelog/v2.14.md:79 +msgid "Note Editor: Expand/Collapse Fields" +msgstr "" + +#: src/changelog/v2.14.md:80 +msgid "Note Editor: Clear Field button" +msgstr "" + +#: src/changelog/v2.14.md:81 +msgid "Note Editor: Ctrl+Shift+Num to switch fields" +msgstr "" + +#: src/changelog/v2.14.md:82 +msgid "Note Editor: Improved image addition / naming" +msgstr "" + +#: src/changelog/v2.14.md:83 +msgid "Note Editor: Add preference to convert newline to HTML (or not)" +msgstr "" + +#: src/changelog/v2.14.md:84 +msgid "OS Integration: Default to \"Anki Card\" in system context menu vs \"Card Browser\"" +msgstr "" + +#: src/changelog/v2.14.md:85 +msgid "Libanki: Add FileUpload API" +msgstr "" + +#: src/changelog/v2.14.md:86 +msgid "Translations: Tagged screenshots on crowdin.com to help our translators" +msgstr "" + +#: src/changelog/v2.14.md:87 +msgid "Stability: Fix rare crashes (down to ~50/day total w/1.8million installs!)" +msgstr "" + +#: src/changelog/v2.14.md:88 +msgid "Performance: massive number of speedups" +msgstr "" + +#: src/changelog/v2.14.md:89 +msgid "Dev: Massively sped up AnkiDroid builds and improved code readability" +msgstr "" + +#: src/changelog/v2.14.md:90 +msgid "Totals: 345 code changes and hundreds of translations, made by volunteers, in 2 months" +msgstr "" + +#: src/changelog/v2.14.md:91 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/30?closed=1)" +msgstr "" + +#: src/changelog/v2.13.md:1 +msgid "Version 2.13.5 (2020-10-03)" +msgstr "" + +#: src/changelog/v2.13.md:2 +msgid "Fix performance for fast (\\<1s) answers in review" +msgstr "" + +#: src/changelog/v2.13.md:3 +msgid "Add links to new Arabic help/manual translation" +msgstr "" + +#: src/changelog/v2.13.md:4 +msgid "Add back button handling to changelog display" +msgstr "" + +#: src/changelog/v2.13.md:5 +msgid "Add rate button to changelog" +msgstr "" + +#: src/changelog/v2.13.md:6 +msgid "Add warning message to handle future db upgrades" +msgstr "" + +#: src/changelog/v2.13.md:7 +msgid "Sync all translations from our volunteer translators (thanks everyone!)" +msgstr "" + +#: src/changelog/v2.13.md:9 +msgid "Version 2.13.4 (2020-09-29)" +msgstr "" + +#: src/changelog/v2.13.md:10 +msgid "Fix crash showing TagsDialog" +msgstr "" + +#: src/changelog/v2.13.md:11 +msgid "Fix crash in gesture detection" +msgstr "" + +#: src/changelog/v2.13.md:12 +msgid "Improve import interrupted error message" +msgstr "" + +#: src/changelog/v2.13.md:13 +msgid "Fix scheduler counts after undo" +msgstr "" + +#: src/changelog/v2.13.md:14 +msgid "Fix Card Browser preview after sort" +msgstr "" + +#: src/changelog/v2.13.md:15 +msgid "Fix button display if answer animation incomplete" +msgstr "" + +#: src/changelog/v2.13.md:16 +msgid "Sync all translations" +msgstr "" + +#: src/changelog/v2.13.md:18 +msgid "Version 2.13.3 (2020-09-23)" +msgstr "" + +#: src/changelog/v2.13.md:19 +msgid "Fix double-clicking answer buttons skipping cards" +msgstr "" + +#: src/changelog/v2.13.md:20 +msgid "Change missing media warning to twice-per-session not twice-per-deck" +msgstr "" + +#: src/changelog/v2.13.md:21 +msgid "Change answer button fade on open" +msgstr "" + +#: src/changelog/v2.13.md:22 +msgid "Updated all translations from volunteer crowdin.com site up to 20200923" +msgstr "" + +#: src/changelog/v2.13.md:24 +msgid "Version 2.13.2 (2020-09-19)" +msgstr "" + +#: src/changelog/v2.13.md:25 +msgid "Fix Crash rare on Card Browser exit" +msgstr "" + +#: src/changelog/v2.13.md:26 +msgid "Fix Crash Android 4.4" +msgstr "" + +#: src/changelog/v2.13.md:27 +msgid "Fix Open Deck failures / improve related messaging" +msgstr "" + +#: src/changelog/v2.13.md:28 +msgid "Fix messaging for Xioami cloze workaround" +msgstr "" + +#: src/changelog/v2.13.md:29 +msgid "Move \"set field language\" after share on Note Editor context menu" +msgstr "" + +#: src/changelog/v2.13.md:31 +msgid "Version 2.13.1 (2020-09-17)" +msgstr "" + +#: src/changelog/v2.13.md:32 +msgid "Add cloze via clipboard paste workaround on MIUI/Xiaomi devices" +msgstr "" + +#: src/changelog/v2.13.md:33 +msgid "Fix Navigation drawer respects safe display / disable animations preference" +msgstr "" + +#: src/changelog/v2.13.md:34 +msgid "Fix Reviewer buttons respect safe display / disable animations preference" +msgstr "" + +#: src/changelog/v2.13.md:35 +msgid "Fix Deck Picker bottom bar opacity" +msgstr "" + +#: src/changelog/v2.13.md:36 +msgid "Fix Error message about missing content on cards" +msgstr "" + +#: src/changelog/v2.13.md:37 +msgid "Fix crash selecting deck that disappears during sync" +msgstr "" + +#: src/changelog/v2.13.md:39 +msgid "Version 2.13.0 (2020-09-15)" +msgstr "" + +#: src/changelog/v2.13.md:40 +msgid "Field tag (such as \"{{Front}}\") appearing in a note's field will be shown as-is in cards." +msgstr "" + +#: src/changelog/v2.13.md:41 +msgid "Add Sync icon badge when changes are pending sync (can be disabled in options)" +msgstr "" + +#: src/changelog/v2.13.md:42 +msgid "Add Edit Note from card Preview while in Card Browser" +msgstr "" + +#: src/changelog/v2.13.md:43 +msgid "Add \"Anki Card\" to system context menu (like \"Card Browser\") - disabled by default" +msgstr "" + +#: src/changelog/v2.13.md:44 +msgid "Add Set keyboard language for specific fields in the note editor (example: one field Japanese, other field Portuguese for input)." +msgstr "" + +#: src/changelog/v2.13.md:45 +msgid "Add Keep keyboard open after adding a note" +msgstr "" + +#: src/changelog/v2.13.md:46 +msgid "Add Card properties available in JavaScript API" +msgstr "" + +#: src/changelog/v2.13.md:47 +msgid "Add JavaScript API versioning for scripts (basis for future plugins)" +msgstr "" + +#: src/changelog/v2.13.md:48 +msgid "Add Auto-Login when selecting saved user account" +msgstr "" + +#: src/changelog/v2.13.md:49 +msgid "Add Allow import of collection.anki21 files when under SchedV1" +msgstr "" + +#: src/changelog/v2.13.md:50 +msgid "Add New screen for first-time users" +msgstr "" + +#: src/changelog/v2.13.md:51 +msgid "Add Button animations when answering cards" +msgstr "" + +#: src/changelog/v2.13.md:52 +msgid "Add Note Editor: Add shortcuts Ctrl+(Alt)+Shift+C to add a cloze." +msgstr "" + +#: src/changelog/v2.13.md:53 +msgid "Fix Some cards in learning were not shown at the right time (Only if you undo/bury/suspend/reset/reschedule and the next card goes to learning mode)" +msgstr "" + +#: src/changelog/v2.13.md:54 +msgid "Fix Selected deck has translucent background if a deck picker background is set" +msgstr "" + +#: src/changelog/v2.13.md:55 +msgid "Fix Improved preview screens" +msgstr "" + +#: src/changelog/v2.13.md:56 +msgid "Fix Better accessibility in Deck Browser for partially sighted users" +msgstr "" + +#: src/changelog/v2.13.md:57 +msgid "Fix Improve visibility of \"Add/Remove Option Group\"" +msgstr "" + +#: src/changelog/v2.13.md:58 +msgid "Fix Improved messages for sync rate limiting error" +msgstr "" + +#: src/changelog/v2.13.md:59 +msgid "Fix Improved messages for reducing study limits" +msgstr "" + +#: src/changelog/v2.13.md:60 +msgid "Fix Improved messaging when collection is missing media" +msgstr "" + +#: src/changelog/v2.13.md:61 +msgid "Fix Improve feedback when accessing Debug Info" +msgstr "" + +#: src/changelog/v2.13.md:62 +msgid "Fix Add additional warnings to reschedule dialog" +msgstr "" + +#: src/changelog/v2.13.md:63 +msgid "Fix Whiteboard pen color can be disabled by pressing icon again" +msgstr "" + +#: src/changelog/v2.13.md:64 +msgid "Fix Ensure all menu items in the reviewer can be customized by \"App Bar Buttons\" setting" +msgstr "" + +#: src/changelog/v2.13.md:65 +msgid "Fix Scheduler discrepancy handling early interval on filtered decks" +msgstr "" + +#: src/changelog/v2.13.md:66 +msgid "Fix Exports work when cards are missing media" +msgstr "" + +#: src/changelog/v2.13.md:67 +msgid "Fix Crash due to logging." +msgstr "" + +#: src/changelog/v2.13.md:68 +msgid "Fix Toasts used to show one more card than the number of card actually reviewed during the time box" +msgstr "" + +#: src/changelog/v2.13.md:69 +msgid "Fix Handle newlines properly in Note Editor Preview" +msgstr "" + +#: src/changelog/v2.13.md:70 +msgid "Fix Improve AnkiDroid opening animation" +msgstr "" + +#: src/changelog/v2.13.md:71 +msgid "Fix Show correct answer button when answering via Keyboard" +msgstr "" + +#: src/changelog/v2.13.md:72 +msgid "Fix \"New Cards Added\" Statistic" +msgstr "" + +#: src/changelog/v2.13.md:73 +msgid "Fix Crash when inserting a cloze when selecting text from right-to-left via keyboard" +msgstr "" + +#: src/changelog/v2.13.md:74 +msgid "Fix \"Show Password\" icon revealing saved password" +msgstr "" + +#: src/changelog/v2.13.md:75 +msgid "Fix Card browser still contains card after the app goes into background" +msgstr "" + +#: src/changelog/v2.13.md:76 +msgid "Fix Daily unbury occurs during sync if necessary" +msgstr "" + +#: src/changelog/v2.13.md:77 +msgid "Fix On big screen, buttons moved during loading" +msgstr "" + +#: src/changelog/v2.13.md:78 +msgid "Translators If some text change because of minor changes (typos) you won't have to translate it again" +msgstr "" + +#: src/changelog/v2.13.md:79 +msgid "Performance improvements (specifically: initial loading of large collection (lot of decks, note type, card type, fields, long templates...), card browser, deck picker startup, next card view, undo, cancelling tasks such as computing a list of card in browser)" +msgstr "" + +#: src/changelog/v2.13.md:80 +msgid "Dev: Massive dev workflow improvements and automated checks for our translations." +msgstr "" + +#: src/changelog/v2.13.md:81 +msgid "Dev: Implement backend for CSV Importer" +msgstr "" + +#: src/changelog/v2.13.md:82 +msgid "Dev: Improve crash reporting on app startup" +msgstr "" + +#: src/changelog/v2.13.md:83 +msgid "Dev: Massive improvement in testing, especially around scheduler / card queue behavior" +msgstr "" + +#: src/changelog/v2.13.md:84 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/27?closed=1)" +msgstr "" + +#: src/changelog/v2.12.md:1 +msgid "Version 2.12.1 (2020-07-21)" +msgstr "" + +#: src/changelog/v2.12.md:2 +msgid "Fix bug previewing edited notes after changing field count" +msgstr "" + +#: src/changelog/v2.12.md:3 +msgid "Fix crash previewing edited notes from dynamic decks" +msgstr "" + +#: src/changelog/v2.12.md:4 +msgid "Fix crash restarting app after a crash" +msgstr "" + +#: src/changelog/v2.12.md:5 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/28?closed=1)" +msgstr "" + +#: src/changelog/v2.12.md:7 +msgid "Version 2.12.0 (2020-07-18)" +msgstr "" + +#: src/changelog/v2.12.md:8 +msgid "Add Crop image feature" +msgstr "" + +#: src/changelog/v2.12.md:9 +msgid "Add Preview in note editor" +msgstr "" + +#: src/changelog/v2.12.md:10 +msgid "Add edit tags in reviewer" +msgstr "" + +#: src/changelog/v2.12.md:11 +msgid "Add volume buttons as gestures" +msgstr "" + +#: src/changelog/v2.12.md:12 +msgid "Add whiteboard pen color" +msgstr "" + +#: src/changelog/v2.12.md:13 +msgid "Add microphone tool bar in reviewer" +msgstr "" + +#: src/changelog/v2.12.md:14 +msgid "Add javascript API (check the Wiki!)" +msgstr "" + +#: src/changelog/v2.12.md:15 +msgid "Improve: app is 3MB smaller" +msgstr "" + +#: src/changelog/v2.12.md:16 +msgid "Fix: show whole tag in tags dialog" +msgstr "" + +#: src/changelog/v2.12.md:17 +msgid "Fix copy note copies tags too" +msgstr "" + +#: src/changelog/v2.12.md:18 +msgid "Fix data corruption canceling template edits" +msgstr "" + +#: src/changelog/v2.12.md:19 +msgid "performance and bug fixes everywhere!" +msgstr "" + +#: src/changelog/v2.12.md:21 +msgid "11 volunteers made hundreds of individual changes this release" +msgstr "" + +#: src/changelog/v2.12.md:23 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/18?closed=1)" +msgstr "" + +#: src/changelog/v2.11.md:1 +msgid "Version 2.11.3 (2020-06-17)" +msgstr "" + +#: src/changelog/v2.11.md:2 +msgid "Fix out-of-memory errors when importing very large decks" +msgstr "" + +#: src/changelog/v2.11.md:3 +msgid "Fix incorrect out-of-space message on import in Android 4" +msgstr "" + +#: src/changelog/v2.11.md:4 +msgid "Fix crash if card viewer closed quickly after view" +msgstr "" + +#: src/changelog/v2.11.md:5 +msgid "Fix unzip fail on .apkg files >2GB" +msgstr "" + +#: src/changelog/v2.11.md:6 +msgid "Fix crash on edit note in browser multi-select" +msgstr "" + +#: src/changelog/v2.11.md:8 +msgid "Version 2.11.2 (2020-06-10)" +msgstr "" + +#: src/changelog/v2.11.md:9 +msgid "Add santali language" +msgstr "" + +#: src/changelog/v2.11.md:10 +msgid "Fix Hebrew, Indonesian, Tagalog languages" +msgstr "" + +#: src/changelog/v2.11.md:11 +msgid "Improve error reporting around apkg import failures" +msgstr "" + +#: src/changelog/v2.11.md:12 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/24?closed=1)" +msgstr "" + +#: src/changelog/v2.11.md:14 +msgid "Version 2.11.1 (2020-06-08)" +msgstr "" + +#: src/changelog/v2.11.md:15 +msgid "Fix crash in Card Browser multi-select mode" +msgstr "" + +#: src/changelog/v2.11.md:16 +msgid "Fix Custom Steps interval dialog space entry issue" +msgstr "" + +#: src/changelog/v2.11.md:17 +msgid "Fix flags don't export with deck" +msgstr "" + +#: src/changelog/v2.11.md:18 +msgid "Fix AnkiDroid API doesn't handle null model id (Anki Compatibility workaround)" +msgstr "" + +#: src/changelog/v2.11.md:19 +msgid "Fix translation crash in sync dialog in Azerbaijani" +msgstr "" + +#: src/changelog/v2.11.md:20 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/23?closed=1)" +msgstr "" + +#: src/changelog/v2.11.md:22 +msgid "Version 2.11.0 (2020-06-05)" +msgstr "" + +#: src/changelog/v2.11.md:23 +msgid "Android minimum supported version is now 4.1 / Jelly Bean / API16 (AnkiWeb Compatibility)" +msgstr "" + +#: src/changelog/v2.11.md:24 +msgid "Change sibling burying should default to off (Anki Compatibility)" +msgstr "" + +#: src/changelog/v2.11.md:25 +msgid "Change learn cards do not go in filtered decks in v1 sched (Anki Compatibility)" +msgstr "" + +#: src/changelog/v2.11.md:26 +msgid "Add Browser Appearance screen, to edit Card Browser render format (Anki Compatibility)" +msgstr "" + +#: src/changelog/v2.11.md:27 +msgid "Add guidance in Note Editor if no cards will be generated despite full fields" +msgstr "" + +#: src/changelog/v2.11.md:28 +msgid "Add all translations from our crowdin.com translation site" +msgstr "" + +#: src/changelog/v2.11.md:29 +msgid "Add ability to decrease daily limit in custom study (Anki Compatibility)" +msgstr "" + +#: src/changelog/v2.11.md:30 +msgid "Add ability to block gesture handling when tapping hints in Reviewer" +msgstr "" + +#: src/changelog/v2.11.md:31 +msgid "Add create subdeck option in deck list long-press context menu" +msgstr "" + +#: src/changelog/v2.11.md:32 +msgid "Add edit note action in Card Browser multi-select mode" +msgstr "" + +#: src/changelog/v2.11.md:33 +msgid "Add ability to turn off 'Card Browser' system text context menu item" +msgstr "" + +#: src/changelog/v2.11.md:34 +msgid "Add nightMode CSS selector for card HTML (Anki Compatibility)" +msgstr "" + +#: src/changelog/v2.11.md:35 +msgid "Add ability to change just the case of a deck name" +msgstr "" + +#: src/changelog/v2.11.md:36 +msgid "Add page-up/page-down gestures" +msgstr "" + +#: src/changelog/v2.11.md:37 +msgid "Improve gesture handling in full-screen / immersive mode" +msgstr "" + +#: src/changelog/v2.11.md:38 +msgid "Improve handling of cloze deletion in TTS mode" +msgstr "" + +#: src/changelog/v2.11.md:39 +msgid "Improve Card Browser search from Android text selection menu" +msgstr "" + +#: src/changelog/v2.11.md:40 +msgid "Improve Card Browser with default hide of media filenames" +msgstr "" + +#: src/changelog/v2.11.md:41 +msgid "Improve Reviewer auto-advance by waiting for TTS to finish" +msgstr "" + +#: src/changelog/v2.11.md:42 +msgid "Improve transparent SVG display in night mode with white background" +msgstr "" + +#: src/changelog/v2.11.md:43 +msgid "Improve anki package import handling" +msgstr "" + +#: src/changelog/v2.11.md:44 +msgid "Improve AnkiWeb login form enter button handling" +msgstr "" + +#: src/changelog/v2.11.md:45 +msgid "Improve hardware back button handling in restore from backup" +msgstr "" + +#: src/changelog/v2.11.md:46 +msgid "Improve Reviewer display of un-rendered LaTeX" +msgstr "" + +#: src/changelog/v2.11.md:47 +msgid "Improve TTS / auto-answer combination, wait for TTS before advance" +msgstr "" + +#: src/changelog/v2.11.md:48 +msgid "Workaround Firefox open downloaded deck bug" +msgstr "" + +#: src/changelog/v2.11.md:49 +msgid "Workaround crash on Samsung devices with >500 deck reminders" +msgstr "" + +#: src/changelog/v2.11.md:50 +msgid "Fix card template editor mistakenly allowing add template on cloze type" +msgstr "" + +#: src/changelog/v2.11.md:51 +msgid "Fix language change preference" +msgstr "" + +#: src/changelog/v2.11.md:52 +msgid "Fix ability to unbury a deck in deck list" +msgstr "" + +#: src/changelog/v2.11.md:53 +msgid "Fix app bar item flicker during review" +msgstr "" + +#: src/changelog/v2.11.md:54 +msgid "Fix V2 scheduler learning card count after undo" +msgstr "" + +#: src/changelog/v2.11.md:55 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/13?closed=1)" +msgstr "" + +#: src/changelog/v2.10.md:1 +msgid "Version 2.10.4 (2020-05-31)" +msgstr "" + +#: src/changelog/v2.10.md:2 +msgid "Workaround expired AnkiWeb SSL Root certificate" +msgstr "" + +#: src/changelog/v2.10.md:3 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/22?closed=1)" +msgstr "" + +#: src/changelog/v2.10.md:5 +msgid "Version 2.10.3 (2020-05-29)" +msgstr "" + +#: src/changelog/v2.10.md:6 +msgid "Fix crash on no permissions on Card Browser system text menu entry" +msgstr "" + +#: src/changelog/v2.10.md:7 +msgid "Fix crash in widget if external storage unmounts" +msgstr "" + +#: src/changelog/v2.10.md:8 +msgid "Fix crash on device reboot if no permissions" +msgstr "" + +#: src/changelog/v2.10.md:9 +msgid "Fix crash if deck picker background image too large" +msgstr "" + +#: src/changelog/v2.10.md:10 +msgid "Fix crash in tags dialog" +msgstr "" + +#: src/changelog/v2.10.md:11 +msgid "Fix bad data generated for null objects (Anki compatibility)" +msgstr "" + +#: src/changelog/v2.10.md:12 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/21?closed=1)" +msgstr "" + +#: src/changelog/v2.10.md:14 +msgid "Version 2.10.2 (2020-05-14)" +msgstr "" + +#: src/changelog/v2.10.md:15 +msgid "Fix type answer cards not rendering correctly" +msgstr "" + +#: src/changelog/v2.10.md:16 +msgid "Fix type answer card template creation on non-English new installs" +msgstr "" + +#: src/changelog/v2.10.md:17 +msgid "Fix frequent full sync caused by incorrect learning card counts" +msgstr "" + +#: src/changelog/v2.10.md:18 +msgid "Fix crash importing into fresh install with no storage permission" +msgstr "" + +#: src/changelog/v2.10.md:20 +msgid "Version 2.10.1 (2020-05-13)" +msgstr "" + +#: src/changelog/v2.10.md:21 +msgid "Updated all translations from crowdin translators" +msgstr "" + +#: src/changelog/v2.10.md:22 +msgid "Fix crash note editor on rapid back button" +msgstr "" + +#: src/changelog/v2.10.md:23 +msgid "Fix crash from incorrect Thai translation" +msgstr "" + +#: src/changelog/v2.10.md:25 +msgid "Version 2.10 (2020-05-12)" +msgstr "" + +#: src/changelog/v2.10.md:26 +msgid "Add welcome dialog explaining need for storage permission" +msgstr "" + +#: src/changelog/v2.10.md:27 +msgid "Add support for Flags on cards (including flagging by gesture)" +msgstr "" + +#: src/changelog/v2.10.md:28 +msgid "Add ability to set background image in Deck Picker" +msgstr "" + +#: src/changelog/v2.10.md:29 +msgid "Add localization of standard templates created in fresh install" +msgstr "" + +#: src/changelog/v2.10.md:30 +msgid "Add support for card javascript to reload current card programmatically" +msgstr "" + +#: src/changelog/v2.10.md:31 +msgid "Add support for restricted learning / classroom devices" +msgstr "" + +#: src/changelog/v2.10.md:32 +msgid "Add preference to disable \"Extended Text UI\" full-screen editor" +msgstr "" + +#: src/changelog/v2.10.md:33 +msgid "Add CSS style capability to heavy checkmark and down arrow in card" +msgstr "" + +#: src/changelog/v2.10.md:34 +msgid "Add display of current interval on reschedule dialog" +msgstr "" + +#: src/changelog/v2.10.md:35 +msgid "Add support for card javascript to answer cards programmatically" +msgstr "" + +#: src/changelog/v2.10.md:36 +msgid "Add ability to toggle sticky field in field editor" +msgstr "" + +#: src/changelog/v2.10.md:37 +msgid "Improve deck list newline, style, script tag handling in deck descriptions" +msgstr "" + +#: src/changelog/v2.10.md:38 +msgid "Improve whiteboard on/off state handling, especially between day/night mode" +msgstr "" + +#: src/changelog/v2.10.md:39 +msgid "Improve multi-selection options in CardBrowser" +msgstr "" + +#: src/changelog/v2.10.md:40 +msgid "Improve performance (systematic optimization process, lots of improvements!)" +msgstr "" + +#: src/changelog/v2.10.md:41 +msgid "Improve handling of erroneous notes (missing fields, improper clozes)" +msgstr "" + +#: src/changelog/v2.10.md:42 +msgid "Improve user messaging on network connection failures" +msgstr "" + +#: src/changelog/v2.10.md:43 +msgid "Improve counting of suspended/buried cards in advanced statistics" +msgstr "" + +#: src/changelog/v2.10.md:44 +msgid "Improve v2 scheduler compatibility with Anki ecosystem" +msgstr "" + +#: src/changelog/v2.10.md:45 +msgid "Improve handling / detection of full sync need" +msgstr "" + +#: src/changelog/v2.10.md:46 +msgid "Improve Anki compatibility by allowing more field/model/deck name characters" +msgstr "" + +#: src/changelog/v2.10.md:47 +msgid "Improve deck list estimated review times with human scale times" +msgstr "" + +#: src/changelog/v2.10.md:48 +msgid "Fix text scaling bug in card browser" +msgstr "" + +#: src/changelog/v2.10.md:49 +msgid "Fix crash in export while using v2 scheduler" +msgstr "" + +#: src/changelog/v2.10.md:50 +msgid "Fix Custom Tabs crash with non-default system web browser" +msgstr "" + +#: src/changelog/v2.10.md:51 +msgid "Fix issues with import of packages with long Unicode names" +msgstr "" + +#: src/changelog/v2.10.md:52 +msgid "Fix incorrect intervals on lapsed filtered v2 scheduler cards" +msgstr "" + +#: src/changelog/v2.10.md:53 +msgid "Fix multimedia editor save/cancel behavior" +msgstr "" + +#: src/changelog/v2.10.md:54 +msgid "Fix incorrect button/gesture availability while existing task is still active" +msgstr "" + +#: src/changelog/v2.10.md:55 +msgid "Fix type answer crash on invalid characters" +msgstr "" + +#: src/changelog/v2.10.md:56 +msgid "Fix cloze references not being recognized in all fields" +msgstr "" + +#: src/changelog/v2.10.md:57 +msgid "Fix invalid ability to change deck to a filtered deck" +msgstr "" + +#: src/changelog/v2.10.md:58 +msgid "Fix crashes on adding invalid images, audios, and videos" +msgstr "" + +#: src/changelog/v2.10.md:59 +msgid "Fix CardBrowser crash after deleting card" +msgstr "" + +#: src/changelog/v2.10.md:60 +msgid "Fix crash and help user if no browser detected" +msgstr "" + +#: src/changelog/v2.10.md:61 +msgid "Fix Reviewer crash if card not available" +msgstr "" + +#: src/changelog/v2.10.md:62 +msgid "Fix crash / improve import of pasted decks" +msgstr "" + +#: src/changelog/v2.10.md:63 +msgid "Fix clicking hint field blocks key input in Reviewer" +msgstr "" + +#: src/changelog/v2.10.md:64 +msgid "Fix Previewer forgetting which card to show on device rotation" +msgstr "" + +#: src/changelog/v2.10.md:65 +msgid "Fix Mathjax/cloze interactions" +msgstr "" + +#: src/changelog/v2.10.md:66 +msgid "Fix vertical alignment of touch area in full-screen review" +msgstr "" + +#: src/changelog/v2.10.md:67 +msgid "Fix handling of ':::' in deck names" +msgstr "" + +#: src/changelog/v2.10.md:68 +msgid "Fix incorrect display of HTML comments in card browser" +msgstr "" + +#: src/changelog/v2.9.md:1 +msgid "Version 2.9.7 (2020-04-30)" +msgstr "" + +#: src/changelog/v2.9.md:2 +msgid "Fix crash / workaround deck options timer config regression in AnkiDesktop" +msgstr "" + +#: src/changelog/v2.9.md:4 +msgid "Version 2.9.6 (2020-04-03)" +msgstr "" + +#: src/changelog/v2.9.md:5 +msgid "Fix multimedia crashes (permissions handling, image add, preview)" +msgstr "" + +#: src/changelog/v2.9.md:6 +msgid "Fix UI and crashes in database check (user dialog + exception handling)" +msgstr "" + +#: src/changelog/v2.9.md:7 +msgid "Fix Windows 10 image compatibility issue with image paths" +msgstr "" + +#: src/changelog/v2.9.md:8 +msgid "Fix AnkiDesktop sync compatibility issue if more than 1000 cards due" +msgstr "" + +#: src/changelog/v2.9.md:9 +msgid "Fix crash in card browser render" +msgstr "" + +#: src/changelog/v2.9.md:10 +msgid "Fix parsing of image tags in card browser" +msgstr "" + +#: src/changelog/v2.9.md:11 +msgid "Fix crash in StudyOptionsFragment" +msgstr "" + +#: src/changelog/v2.9.md:12 +msgid "Fix issue with deck options group changing on export" +msgstr "" + +#: src/changelog/v2.9.md:13 +msgid "Fix issue with exports containing unexpected media" +msgstr "" + +#: src/changelog/v2.9.md:14 +msgid "Fix issue with dynamic decks (crash fix, export fix)" +msgstr "" + +#: src/changelog/v2.9.md:15 +msgid "Fix high frequency issue \"AnkiDroid directory is inaccessible\"" +msgstr "" + +#: src/changelog/v2.9.md:16 +msgid "Fix high frequency WebView (card viewer) crash" +msgstr "" + +#: src/changelog/v2.9.md:17 +msgid "Add columns to card browser (due, ease, changed, created, edited)" +msgstr "" + +#: src/changelog/v2.9.md:18 +msgid "Fix card scheduler not respecting maximum intervals" +msgstr "" + +#: src/changelog/v2.9.md:19 +msgid "Fix card browser spins forever on images or empty strings" +msgstr "" + +#: src/changelog/v2.9.md:21 +msgid "Version 2.9.5 (2020-03-15)" +msgstr "" + +#: src/changelog/v2.9.md:22 +msgid "Fix crash rendering card list while updating card browser search" +msgstr "" + +#: src/changelog/v2.9.md:23 +msgid "Fix case-sensitivity issue with pronunciation words not being found" +msgstr "" + +#: src/changelog/v2.9.md:24 +msgid "Fix crash caused by auto-sync on startup showing dialog too soon" +msgstr "" + +#: src/changelog/v2.9.md:25 +msgid "Fix crash on preview of TTS cards showing language selectiond dialog too slowly" +msgstr "" + +#: src/changelog/v2.9.md:26 +msgid "Fix crash on import if collection not found" +msgstr "" + +#: src/changelog/v2.9.md:27 +msgid "Fix Anki ecosystem deck configuration issue for Anki Desktop users \\<= 2.16" +msgstr "" + +#: src/changelog/v2.9.md:28 +msgid "Fix crash if user attempts to open camera or gallery and no app is available" +msgstr "" + +#: src/changelog/v2.9.md:29 +msgid "Fix crash building deck reminders while deck is synchronizing" +msgstr "" + +#: src/changelog/v2.9.md:30 +msgid "Fix crash related to audio recording stop" +msgstr "" + +#: src/changelog/v2.9.md:31 +msgid "Show helpful messages if import fails because device is out of space" +msgstr "" + +#: src/changelog/v2.9.md:32 +msgid "Fix crash when taking pictures on devices with Lollipop and older" +msgstr "" + +#: src/changelog/v2.9.md:34 +msgid "Version 2.9.4 (2020-02-18)" +msgstr "" + +#: src/changelog/v2.9.md:35 +msgid "Fix crash when fetching pronunciations in note editor" +msgstr "" + +#: src/changelog/v2.9.md:36 +msgid "Fix issue with pronunciation words not being found" +msgstr "" + +#: src/changelog/v2.9.md:37 +msgid "Fix crash on startup for users with auto-sync on startup" +msgstr "" + +#: src/changelog/v2.9.md:38 +msgid "Fix crash on deck import when app is in background" +msgstr "" + +#: src/changelog/v2.9.md:39 +msgid "Fix crash for users of Google Chrome Canary" +msgstr "" + +#: src/changelog/v2.9.md:40 +msgid "Fix crash when adding certain audio clips" +msgstr "" + +#: src/changelog/v2.9.md:41 +msgid "Fix crash related to fetching Sound metadata" +msgstr "" + +#: src/changelog/v2.9.md:42 +msgid "Fix issue where audio plays twice" +msgstr "" + +#: src/changelog/v2.9.md:44 +msgid "Version 2.9.3 (2020-02-09)" +msgstr "" + +#: src/changelog/v2.9.md:45 +msgid "Fix issues with connection timeouts and new encryption library" +msgstr "" + +#: src/changelog/v2.9.md:46 +msgid "Fix incorrect handling of decks with ':::' in their name" +msgstr "" + +#: src/changelog/v2.9.md:48 +msgid "Version 2.9.2 (2020-02-03)" +msgstr "" + +#: src/changelog/v2.9.md:49 +msgid "Add support for new AnkiWeb encryption changes" +msgstr "" + +#: src/changelog/v2.9.md:50 +msgid "Fix some bugs using filtered decks" +msgstr "" + +#: src/changelog/v2.9.md:51 +msgid "Fix crash on app startup with uninitialized collection" +msgstr "" + +#: src/changelog/v2.9.md:52 +msgid "Fix some issues with new cloze deletion menu" +msgstr "" + +#: src/changelog/v2.9.md:53 +msgid "Fix issue with Mathjax + cloze deletion" +msgstr "" + +#: src/changelog/v2.9.md:54 +msgid "Fix incorrect intervals bug with new scheduler" +msgstr "" + +#: src/changelog/v2.9.md:55 +msgid "Add various patches from Anki Desktop" +msgstr "" + +#: src/changelog/v2.9.md:57 +msgid "Version 2.9.1 (2019-10-16)" +msgstr "" + +#: src/changelog/v2.9.md:58 +msgid "Fix crash reviewing on Android 5 - 7" +msgstr "" + +#: src/changelog/v2.9.md:59 +msgid "Fix crash on Hungarian translation" +msgstr "" + +#: src/changelog/v2.9.md:61 +msgid "Version 2.9 (2019-10-14)" +msgstr "" + +#: src/changelog/v2.9.md:62 +msgid "Change to new adaptive icon" +msgstr "" + +#: src/changelog/v2.9.md:63 +msgid "Add multi-select in the card browser (delete, change deck, reschedule)" +msgstr "" + +#: src/changelog/v2.9.md:64 +msgid "Add support for new Anki 2.1 scheduler" +msgstr "" + +#: src/changelog/v2.9.md:65 +msgid "Add support for Mathjax" +msgstr "" + +#: src/changelog/v2.9.md:66 +msgid "Add ability to add local audio files to notes" +msgstr "" + +#: src/changelog/v2.9.md:67 +msgid "Add ability to specify filename and folder on export and import" +msgstr "" + +#: src/changelog/v2.9.md:68 +msgid "Add ability to insert cloze in Note Editor" +msgstr "" + +#: src/changelog/v2.9.md:69 +msgid "Add ability to reposition cards " +msgstr "" + +#: src/changelog/v2.9.md:70 +msgid "Add ability to use due reminders for specific decks" +msgstr "" + +#: src/changelog/v2.9.md:71 +msgid "Add support for gamepad input when reviewing" +msgstr "" + +#: src/changelog/v2.9.md:72 +msgid "Add support for common keyboard shortcuts from Anki Desktop" +msgstr "" + +#: src/changelog/v2.9.md:73 +msgid "Add ability to search in Card Browser for text from system context menu" +msgstr "" + +#: src/changelog/v2.9.md:74 +msgid "Add ability to recognize tts HTML elements in questions and answers" +msgstr "" + +#: src/changelog/v2.9.md:75 +msgid "Add ability to display LaTeX rendered to SVG (vs PNG) from Anki Desktop" +msgstr "" + +#: src/changelog/v2.9.md:76 +msgid "Add confirmation check for full sync trigger in preferences" +msgstr "" + +#: src/changelog/v2.9.md:77 +msgid "Fix excessive pull-to-sync false positives. Disable when not at top of page." +msgstr "" + +#: src/changelog/v2.9.md:78 +msgid "Fix some issues with focus in Note Editor" +msgstr "" + +#: src/changelog/v2.9.md:79 +msgid "Fix media sync errors related to file creation issues" +msgstr "" + +#: src/changelog/v2.9.md:80 +msgid "Fix crash related to use of camera without permission or no camera hardware " +msgstr "" + +#: src/changelog/v2.9.md:81 +msgid "Fix crash related to Card Browser allowing preview with no cards selected" +msgstr "" + +#: src/changelog/v2.9.md:82 +msgid "Fix crash in Reviewer when collection inaccessible" +msgstr "" + +#: src/changelog/v2.9.md:83 +msgid "Fix crash related to TTS when TTS not initialized" +msgstr "" + +#: src/changelog/v2.9.md:84 +msgid "Fix crash related to sdcard mount/unmount on inaccessible collection" +msgstr "" + +#: src/changelog/v2.9.md:85 +msgid "Fix crash related to audio button being visible after loading pronunciation media" +msgstr "" + +#: src/changelog/v2.9.md:86 +msgid "Fix crash when attempting to import invalid zip files " +msgstr "" + +#: src/changelog/v2.9.md:87 +msgid "Fix crash related to switching from split-window mode to single-window mode" +msgstr "" + +#: src/changelog/v2.9.md:88 +msgid "Fix crash related to missing preferences in Preference editor" +msgstr "" + +#: src/changelog/v2.9.md:89 +msgid "Fix crash on deck selection after deleting a deck and immediately closing app" +msgstr "" + +#: src/changelog/v2.9.md:90 +msgid "Fix crash in Reviewer when non-standard browser installed" +msgstr "" + +#: src/changelog/v2.9.md:91 +msgid "Fix type-answer field showing unexpectedly after undo in Reviewer" +msgstr "" + +#: src/changelog/v2.9.md:92 +msgid "Fix incorrect display of some characters when using type-answer" +msgstr "" + +#: src/changelog/v2.9.md:93 +msgid "Fix error related to media in subfolders not showing in Reviewer" +msgstr "" + +#: src/changelog/v2.9.md:94 +msgid "Fix some issues with generated flashcard html and CSS selectors" +msgstr "" + +#: src/changelog/v2.9.md:95 +msgid "Fix some Glosbe and Beolingus regressions" +msgstr "" + +#: src/changelog/v2.9.md:96 +msgid "Fix issue where new deck was created when note type was renamed" +msgstr "" + +#: src/changelog/v2.9.md:97 +msgid "Fix add note button disappearing from Card Browser when returning from search" +msgstr "" + +#: src/changelog/v2.9.md:98 +msgid "Fix some statistics display issues " +msgstr "" + +#: src/changelog/v2.9.md:99 +msgid "Fix incorrect display of some preferences" +msgstr "" + +#: src/changelog/v2.9.md:100 +msgid "Fix invisible notification bar in NoteEditor" +msgstr "" + +#: src/changelog/v2.9.md:101 +msgid "Fix newline characters not working in cloze deletions" +msgstr "" + +#: src/changelog/v2.9.md:102 +msgid "Increase max card count display from 1000 to 99999" +msgstr "" + +#: src/changelog/v2.9.md:103 +msgid "Improve display handling of very long review intervals (> 68 years)" +msgstr "" + +#: src/changelog/v2.9.md:104 +msgid "Improve next/back buttons when using Previewer on multiple cards" +msgstr "" + +#: src/changelog/v2.9.md:105 +msgid "Improve handling of selected deck between statistics, card browser and deck picker" +msgstr "" + +#: src/changelog/v2.9.md:106 +msgid "Improve Card Browser search by restoring when returning from other activities" +msgstr "" + +#: src/changelog/v2.9.md:107 +msgid "Improve card focus handling when moving between Note Editor and Card Template Editor" +msgstr "" + +#: src/changelog/v2.9.md:108 +msgid "Improve labeling of deck-group vs deck-specific options" +msgstr "" + +#: src/changelog/v2.9.md:109 +msgid "Improve formatting of HTTP error codes during sync" +msgstr "" + +#: src/changelog/v2.9.md:110 +msgid "Improve handling of multi-touch events while whiteboard displayed" +msgstr "" + +#: src/changelog/v2.9.md:111 +msgid "Improve permission dialog descriptions" +msgstr "" + +#: src/changelog/v2.9.md:112 +msgid "Improve handling of \"preview new cards\" setting when creating custom study deck" +msgstr "" + +#: src/changelog/v2.9.md:113 +msgid "Improve Navigation Drawer performance on older devices" +msgstr "" + +#: src/changelog/v2.9.md:114 +msgid "Improve database check dialog with addition progress updates during check" +msgstr "" + +#: src/changelog/v2.9.md:115 +msgid "Use different notification channels for study reminders and general notifications" +msgstr "" + +#: src/changelog/v2.9.md:116 +msgid "Drop support for Android \\< Ice Cream Sandwich MR1 (API15, Android 4.0.3)" +msgstr "" + +#: src/changelog/v2.9.md:117 +msgid "Add support for more features on Chromebook (import, export, restore backup, camera)" +msgstr "" + +#: src/changelog/v2.9.md:118 +msgid "Add API support for card/note bury and suspend" +msgstr "" + +#: src/changelog/v2.9.md:119 +msgid "Add API to open Reviewer on specific decks from other apps" +msgstr "" + +#: src/changelog/v2.9.md:120 +msgid "Add support for HTML/Javascript debugging" +msgstr "" + +#: src/changelog/v2.9.md:121 +msgid "Add link to third party apps which support AnkiDroid API in advanced preferences" +msgstr "" + +#: src/changelog/v2.9.md:122 +msgid "Fix issue with custom sync server certificates" +msgstr "" + +#: src/changelog/v2.9.md:123 +msgid "Perform basic DB integrity check on app upgrade" +msgstr "" + +#: src/changelog/v2.9.md:124 +msgid "Introduce optional analytics reporting" +msgstr "" + +#: src/changelog/v2.8.md:1 +msgid "Version 2.8.4 (2018-04-27)" +msgstr "" + +#: src/changelog/v2.8.md:2 +msgid "Fix error syncing due to too many card templates" +msgstr "" + +#: src/changelog/v2.8.md:4 +msgid "Version 2.8.3 (2017-11-10)" +msgstr "" + +#: src/changelog/v2.8.md:5 +msgid "Fix crash adding a picture from camera" +msgstr "" + +#: src/changelog/v2.8.md:6 +msgid "Fix add note icon disappearing in browser after search" +msgstr "" + +#: src/changelog/v2.8.md:7 +msgid "Fix translations from Glosbe" +msgstr "" + +#: src/changelog/v2.8.md:8 +msgid "Fix crash long-tapping when no deck is selected" +msgstr "" + +#: src/changelog/v2.8.md:9 +msgid "Fix crash entering advanced settings on some devices" +msgstr "" + +#: src/changelog/v2.8.md:10 +msgid "Fix incorrect graph display in statistics" +msgstr "" + +#: src/changelog/v2.8.md:11 +msgid "Fix deck not changing properly in statistics" +msgstr "" + +#: src/changelog/v2.8.md:12 +msgid "Fix rounding error in statistics weekly breakdown" +msgstr "" + +#: src/changelog/v2.8.md:13 +msgid "Fix spurious new deck created on model rename" +msgstr "" + +#: src/changelog/v2.8.md:14 +msgid "Improve error message on exception during media sync" +msgstr "" + +#: src/changelog/v2.8.md:15 +msgid "Improve animation when transitioning between screens" +msgstr "" + +#: src/changelog/v2.8.md:16 +msgid "Use a round icon on devices that support it" +msgstr "" + +#: src/changelog/v2.8.md:18 +msgid "Version 2.8.2 (2017-02-28)" +msgstr "" + +#: src/changelog/v2.8.md:19 +msgid "Fix bugs showing confirmation dialogs in various places" +msgstr "" + +#: src/changelog/v2.8.md:20 +msgid "Fix uncommon crash showing dialog after sync" +msgstr "" + +#: src/changelog/v2.8.md:22 +msgid "Version 2.8.1 (2017-02-06)" +msgstr "" + +#: src/changelog/v2.8.md:23 +msgid "Allow sending exported apkg to arbitrary app (e.g. Google Drive)" +msgstr "" + +#: src/changelog/v2.8.md:24 +msgid "Allow AnkiWeb to display a warning on sync completion" +msgstr "" + +#: src/changelog/v2.8.md:25 +msgid "Fix potential full-sync after sync cancellation" +msgstr "" + +#: src/changelog/v2.8.md:26 +msgid "Fix media sync sometimes scanning all files again" +msgstr "" + +#: src/changelog/v2.8.md:27 +msgid "Fix removing $ character when importing media files" +msgstr "" + +#: src/changelog/v2.8.md:28 +msgid "Improve automatic card answer timing when audio is played" +msgstr "" + +#: src/changelog/v2.8.md:29 +msgid "Improve rendering of some statistics" +msgstr "" + +#: src/changelog/v2.8.md:30 +msgid "Fix some crashes in the Russian, Vietnamese, and Chinese translations" +msgstr "" + +#: src/changelog/v2.8.md:31 +msgid "Fix crash sending exported apkg by email. NB: Export path can no longer be modified." +msgstr "" + +#: src/changelog/v2.7.md:1 +msgid "Version 2.7 (2016-10-16)" +msgstr "" + +#: src/changelog/v2.7.md:2 +msgid "Add pull-to-sync feature" +msgstr "" + +#: src/changelog/v2.7.md:3 +msgid "Add option to place answer buttons at the top" +msgstr "" + +#: src/changelog/v2.7.md:4 +msgid "Add widget to directly access \"Add note\" screen" +msgstr "" + +#: src/changelog/v2.7.md:5 +msgid "Fix issue with importing whole collections and restoring backups" +msgstr "" + +#: src/changelog/v2.7.md:6 +msgid "Fix deck import failing after the first successful one" +msgstr "" + +#: src/changelog/v2.7.md:7 +msgid "Fix cards in learning queue not being randomized" +msgstr "" + +#: src/changelog/v2.7.md:8 +msgid "Fix crash with fullscreen mode and hidden answer buttons" +msgstr "" + +#: src/changelog/v2.7.md:9 +msgid "Fix rare crash when opening deck options" +msgstr "" + +#: src/changelog/v2.7.md:10 +msgid "Improve support with TalkBack" +msgstr "" + +#: src/changelog/v2.6.md:1 +msgid "Version 2.6.1 (2016-07-08)" +msgstr "" + +#: src/changelog/v2.6.md:2 +msgid "Add card cycling in previewer (similar to desktop client)" +msgstr "" + +#: src/changelog/v2.6.md:3 +msgid "Add option to hide 'minutes left' in reviewer" +msgstr "" + +#: src/changelog/v2.6.md:4 +msgid "Fix language from app setting not always being used" +msgstr "" + +#: src/changelog/v2.6.md:5 +msgid "Fix not being able to play back new sound recording" +msgstr "" + +#: src/changelog/v2.6.md:6 +msgid "Fix potential crash on Android 2.3 (Gingerbread)" +msgstr "" + +#: src/changelog/v2.6.md:7 +msgid "Improved use of horizontal space when resizing large images" +msgstr "" + +#: src/changelog/v2.6.md:8 +msgid "Minor adjustment to black theme colors" +msgstr "" + +#: src/changelog/v2.6.md:10 +msgid "Version 2.6 (2016-06-14)" +msgstr "" + +#: src/changelog/v2.6.md:11 +msgid "Add two new themes (black, plain), selectable in preferences" +msgstr "" + +#: src/changelog/v2.6.md:12 +msgid "Make reviewer app bar icons customizable" +msgstr "" + +#: src/changelog/v2.6.md:13 +msgid "Split \"hide / delete\" menu in reviewer into \"bury\", \"suspend\", \"delete note\"" +msgstr "" + +#: src/changelog/v2.6.md:14 +msgid "Reviewer undo button now removes last stroke when whiteboard in use" +msgstr "" + +#: src/changelog/v2.6.md:15 +msgid "Add menu entry to change TTS language from reviewer" +msgstr "" + +#: src/changelog/v2.6.md:16 +msgid "Add more of the statistics available on the desktop client" +msgstr "" + +#: src/changelog/v2.6.md:17 +msgid "Add \"advanced statistics\" plugin (must be enabled in advanced settings)" +msgstr "" + +#: src/changelog/v2.6.md:18 +msgid "Add setting to configure custom sync server (advanced)" +msgstr "" + +#: src/changelog/v2.6.md:19 +msgid "Fix card templates created in AnkiDroid incorrectly using bold style" +msgstr "" + +#: src/changelog/v2.6.md:20 +msgid "Fix many importing issues (behavior now consistent with the desktop client)" +msgstr "" + +#: src/changelog/v2.6.md:21 +msgid "Fix long-tapping card in browser not always working" +msgstr "" + +#: src/changelog/v2.6.md:22 +msgid "Update sound playback button image" +msgstr "" + +#: src/changelog/v2.6.md:23 +msgid "Reduce size of whiteboard and gesture area for better interoperability with full screen" +msgstr "" + +#: src/changelog/v2.6.md:24 +msgid "Improve error messages with inaccessible collections" +msgstr "" + +#: src/changelog/v2.6.md:25 +msgid "Allow auto-play of HTML media elements (for templates that enable it)" +msgstr "" + +#: src/changelog/v2.6.md:26 +msgid "Significant updates to the content provider and API (for developers; see documentation)" +msgstr "" + +#: src/changelog/v2.6.md:27 +msgid "Many small bug fixes, improvements, theme adjustments, translation updates" +msgstr "" + +#: src/changelog/v2.5.md:1 +msgid "Version 2.5.4 (2015-12-14)" +msgstr "" + +#: src/changelog/v2.5.md:2 +msgid "Fix background color in overflow menu of deck picker" +msgstr "" + +#: src/changelog/v2.5.md:4 +msgid "Version 2.5.3 (2015-12-14)" +msgstr "" + +#: src/changelog/v2.5.md:5 +msgid "Fix floating action button (blue +) interfering with deck list on Android 2.3" +msgstr "" + +#: src/changelog/v2.5.md:6 +msgid "Fix opening apkg files from Gmail" +msgstr "" + +#: src/changelog/v2.5.md:7 +msgid "Fix automatic playback of consecutive videos" +msgstr "" + +#: src/changelog/v2.5.md:8 +msgid "Add a new launch screen" +msgstr "" + +#: src/changelog/v2.5.md:9 +msgid "Improve behaviour surrounding the deck overview screen" +msgstr "" + +#: src/changelog/v2.5.md:10 +msgid "Multiple media files can now be added to one field in the note editor" +msgstr "" + +#: src/changelog/v2.5.md:11 +msgid "Don't include unused media files on export" +msgstr "" + +#: src/changelog/v2.5.md:12 +msgid "Undo behaviour is now consistent with the desktop client (can no longer undo note edits)" +msgstr "" + +#: src/changelog/v2.5.md:13 +msgid "Enhancements to sync canceling" +msgstr "" + +#: src/changelog/v2.5.md:14 +msgid "Minor performance enhancements, crash fixes, and UI tweaks" +msgstr "" + +#: src/changelog/v2.5.md:16 +msgid "Version 2.5.2 (2015-12-04)" +msgstr "" + +#: src/changelog/v2.5.md:17 +msgid "Fix start-up crashes on Samsung devices running Android 4.2" +msgstr "" + +#: src/changelog/v2.5.md:18 +msgid "Fix crash for new users on Android 6.0" +msgstr "" + +#: src/changelog/v2.5.md:19 +msgid "Reverted to old typing method. The new method is now an option which is off by default." +msgstr "" + +#: src/changelog/v2.5.md:20 +msgid "You can now click on the numbers in the right-most part of the deck list to open the deck overview screen" +msgstr "" + +#: src/changelog/v2.5.md:21 +msgid "Various fixes to transition animations and progress bars" +msgstr "" + +#: src/changelog/v2.5.md:22 +msgid "Add option to remove empty cards (previously only possible on desktop)" +msgstr "" + +#: src/changelog/v2.5.md:23 +msgid "Remove: Google Translate filter. In practice, this feature had no effect and is not required" +msgstr "" + +#: src/changelog/v2.5.md:24 +msgid "Remove: Google image search for multimedia card. The image search API has been discontinued by Google and no longer works" +msgstr "" + +#: src/changelog/v2.5.md:26 +msgid "Version 2.5.1 (2015-12-01)" +msgstr "" + +#: src/changelog/v2.5.md:27 +msgid "Fix crash when loading deck list (could not open collection bug)" +msgstr "" + +#: src/changelog/v2.5.md:28 +msgid "Fix visible progress bar showing when answering card" +msgstr "" + +#: src/changelog/v2.5.md:30 +msgid "Version 2.5 (2015-11-30)" +msgstr "" + +#: src/changelog/v2.5.md:31 +msgid "Redesign of user interface to use material design" +msgstr "" + +#: src/changelog/v2.5.md:32 +msgid "Add new dark theme" +msgstr "" + +#: src/changelog/v2.5.md:33 +msgid "Simplify the study process by bypassing deck overview screen" +msgstr "" + +#: src/changelog/v2.5.md:34 +msgid "Add ability to add, edit, delete note types" +msgstr "" + +#: src/changelog/v2.5.md:35 +msgid "Add setting to enable auto-sync and a Tasker intent to trigger sync" +msgstr "" + +#: src/changelog/v2.5.md:36 +msgid "Replace \"instant add\" feature with new API for 3rd party apps to add cards directly to AnkiDroid" +msgstr "" + +#: src/changelog/v2.5.md:37 +msgid "\"Type in the answer\" input box now built into the card html itself" +msgstr "" + +#: src/changelog/v2.5.md:38 +msgid "Make fullscreen-mode immersive and added setting to hide answer buttons when using gestures" +msgstr "" + +#: src/changelog/v2.5.md:39 +msgid "Add css class for customizing card background color when night mode is enabled" +msgstr "" + +#: src/changelog/v2.5.md:40 +msgid "Allow changing media volume from the deck picker" +msgstr "" + +#: src/changelog/v2.5.md:41 +msgid "Add ability to save and view common searches in the card browser" +msgstr "" + +#: src/changelog/v2.5.md:42 +msgid "Browser now shows full question and answer in the results by default" +msgstr "" + +#: src/changelog/v2.5.md:43 +msgid "Only show tags relevant to that deck when doing custom study by tag" +msgstr "" + +#: src/changelog/v2.5.md:44 +msgid "Fix some bugs in the widget" +msgstr "" + +#: src/changelog/v2.5.md:45 +msgid "Remove \"simple interface\"" +msgstr "" + +#: src/changelog/v2.5.md:46 +msgid "Remove support for Android version 2.1 and 2.2 (minimum is now 2.3.3)" +msgstr "" + +#: src/changelog/v2.5.md:47 +msgid "Add support for Android 6 Marshmallow" +msgstr "" + +#: src/changelog/v2.5.md:48 +msgid "Disable write-ahead-logging in sqlite database" +msgstr "" + +#: src/changelog/v2.5.md:49 +msgid "Many other bug fixes and small improvements" +msgstr "" + +#: src/changelog/v2.4.md:1 +msgid "Version 2.4.4 (2015-10-20)" +msgstr "" + +#: src/changelog/v2.4.md:2 +msgid "Fix playback of sound files with apostrophes in file name" +msgstr "" + +#: src/changelog/v2.4.md:3 +msgid "Fix new card siblings not being buried for the same day" +msgstr "" + +#: src/changelog/v2.4.md:4 +msgid "Fix media on cards when using the Hebrew Fix option" +msgstr "" + +#: src/changelog/v2.4.md:5 +msgid "Fix crashes related to \"Relative overdueness\" and make this sort order available on AnkiDroid" +msgstr "" + +#: src/changelog/v2.4.md:6 +msgid "When mixing new and review cards, make their rotation more consistent with desktop" +msgstr "" + +#: src/changelog/v2.4.md:8 +msgid "Version 2.4.3 (2015-04-21)" +msgstr "" + +#: src/changelog/v2.4.md:9 +msgid "Fix \"unknown field\" bug" +msgstr "" + +#: src/changelog/v2.4.md:10 +msgid "Fix crash showing welcome screen on Android 2.3" +msgstr "" + +#: src/changelog/v2.4.md:11 +msgid "Fix crash caused by widget" +msgstr "" + +#: src/changelog/v2.4.md:12 +msgid "Fix rare crash in browser" +msgstr "" + +#: src/changelog/v2.4.md:13 +msgid "Fix a couple of sync issues" +msgstr "" + +#: src/changelog/v2.4.md:14 +msgid "Fix crash starting AnkiDroid on a small number of devices" +msgstr "" + +#: src/changelog/v2.4.md:15 src/changelog/v2.4.md:29 +msgid "Update translations" +msgstr "" + +#: src/changelog/v2.4.md:17 +msgid "Version 2.4.2 (2015-03-18)" +msgstr "" + +#: src/changelog/v2.4.md:18 +msgid "Fix some bugs with cloze templates" +msgstr "" + +#: src/changelog/v2.4.md:19 +msgid "Fix a translation error" +msgstr "" + +#: src/changelog/v2.4.md:21 +msgid "Version 2.4.1 (2015-03-15)" +msgstr "" + +#: src/changelog/v2.4.md:22 +msgid "Fix some bugs with filtered decks" +msgstr "" + +#: src/changelog/v2.4.md:23 +msgid "Improve importing of shared decks" +msgstr "" + +#: src/changelog/v2.4.md:24 +msgid "Open settings if AnkiDroid dir inaccessible" +msgstr "" + +#: src/changelog/v2.4.md:25 +msgid "Fix a bug with zooming" +msgstr "" + +#: src/changelog/v2.4.md:26 +msgid "Fix a bug where old card was still shown in reviewer after changing deck" +msgstr "" + +#: src/changelog/v2.4.md:27 +msgid "Fix some issues with cloze deletion" +msgstr "" + +#: src/changelog/v2.4.md:28 +msgid "Fix various crashes" +msgstr "" + +#: src/changelog/v2.4.md:31 +msgid "Version 2.4 (2015-01-28)" +msgstr "" + +#: src/changelog/v2.4.md:32 +msgid "Move \"preview\" feature to browser" +msgstr "" + +#: src/changelog/v2.4.md:33 +msgid "Add ability to change note type of existing flashcards" +msgstr "" + +#: src/changelog/v2.4.md:34 +msgid "Add ability to view and delete card templates" +msgstr "" + +#: src/changelog/v2.4.md:35 +msgid "Fix TTS for most devices" +msgstr "" + +#: src/changelog/v2.4.md:36 +msgid "Support playback of videos (see supported formats [here](http://developer.android.com/guide/appendix/media-formats.html))" +msgstr "" + +#: src/changelog/v2.4.md:37 +msgid "Improve rendering of second column in browser" +msgstr "" + +#: src/changelog/v2.4.md:38 +msgid "Improve detection of swipe gestures" +msgstr "" + +#: src/changelog/v2.4.md:39 +msgid "Increase number of languages in Glosbe translator" +msgstr "" + +#: src/changelog/v2.4.md:40 +msgid "Add support for Chromebooks" +msgstr "" + +#: src/changelog/v2.4.md:41 +msgid "New crash report system" +msgstr "" + +#: src/changelog/v2.4.md:42 +msgid "Bug fixes" +msgstr "" + +#: src/changelog/v2.3.md:1 +msgid "Version 2.3.2 (2014-11-06)" +msgstr "" + +#: src/changelog/v2.3.md:2 +msgid "Bug fixes: Sync, TTS, Remote images, Advanced editor, Export" +msgstr "" + +#: src/changelog/v2.3.md:3 +msgid "Note: This is the last version of AnkiDroid supported by AnkiWeb. Previous versions will not sync." +msgstr "" + +#: src/changelog/v2.3.md:5 +msgid "Version 2.3 (2014-10-27)" +msgstr "" + +#: src/changelog/v2.3.md:6 +msgid "Add new user manual" +msgstr "" + +#: src/changelog/v2.3.md:7 +msgid "Make statistics identical to Anki Desktop" +msgstr "" + +#: src/changelog/v2.3.md:8 +msgid "Fixes to media sync" +msgstr "" + +#: src/changelog/v2.3.md:9 +msgid "Fix bug where images were not showing" +msgstr "" + +#: src/changelog/v2.3.md:10 +msgid "Change layout of note editor" +msgstr "" + +#: src/changelog/v2.3.md:11 +msgid "Add new disable whiteboard option to reviewer and update icons" +msgstr "" + +#: src/changelog/v2.3.md:12 +msgid "Add full support for APKG export and import" +msgstr "" + +#: src/changelog/v2.3.md:13 +msgid "Add feature to email exported APKG" +msgstr "" + +#: src/changelog/v2.3.md:14 +msgid "Increase default number of backups and use APKG" +msgstr "" + +#: src/changelog/v2.3.md:15 +msgid "Make preview card accessible from card browser" +msgstr "" + +#: src/changelog/v2.3.md:16 +msgid "Make shared decks download with Android browser" +msgstr "" + +#: src/changelog/v2.3.md:17 +msgid "Add reset and reschedule feature in note editor" +msgstr "" + +#: src/changelog/v2.3.md:18 +msgid "Add a new notification system and icon" +msgstr "" + +#: src/changelog/v2.3.md:19 +msgid "Replace tutorial deck with new welcome screen" +msgstr "" + +#: src/changelog/v2.3.md:20 +msgid "Disable opening navigation drawer from reviewer when swipe is used" +msgstr "" + +#: src/changelog/v2.3.md:21 +msgid "Improve audio recording quality" +msgstr "" + +#: src/changelog/v2.3.md:22 +msgid "Support sticky fields when enabled in Anki Desktop" +msgstr "" + +#: src/changelog/v2.3.md:23 +msgid "Many other bug fixes" +msgstr "" + +#: src/changelog/v2.2.md:1 +msgid "Version 2.2.3 (2014-08-04)" +msgstr "" + +#: src/changelog/v2.2.md:2 +msgid "New media sync protocol" +msgstr "" + +#: src/changelog/v2.2.md:3 +msgid "Fix 2 bugs for opening links and resuming the app" +msgstr "" + +#: src/changelog/v2.2.md:5 +msgid "Version 2.2 (2014-07-21)" +msgstr "" + +#: src/changelog/v2.2.md:6 +msgid "Redesign layout" +msgstr "" + +#: src/changelog/v2.2.md:7 +msgid "Add pictures and sounds to flashcards (experimental)" +msgstr "" + +#: src/changelog/v2.2.md:8 +msgid "Make second column in card browser configurable" +msgstr "" + +#: src/changelog/v2.2.md:9 +msgid "Make images on flashcards zoomable" +msgstr "" + +#: src/changelog/v2.2.md:10 +msgid "Improve preview feature and access via action bar" +msgstr "" + +#: src/changelog/v2.2.md:11 +msgid "Simplify menus and settings" +msgstr "" + +#: src/changelog/v2.2.md:12 +msgid "Make slow searches in card browser cancellable" +msgstr "" + +#: src/changelog/v2.2.md:13 +msgid "Improve adding/removing tags" +msgstr "" + +#: src/changelog/v2.2.md:14 +msgid "Fix \"type in the answer\" and cloze deletion features" +msgstr "" + +#: src/changelog/v2.2.md:15 +msgid "Fix whiteboard feature" +msgstr "" + +#: src/changelog/v2.2.md:16 +msgid "Restore backups from within the app" +msgstr "" + +#: src/changelog/v2.2.md:17 +msgid "Make volume duck on any background music when sounds played" +msgstr "" + +#: src/changelog/v2.2.md:18 +msgid "Make playing of sounds consistent with Desktop version" +msgstr "" + +#: src/changelog/v2.2.md:19 +msgid "Remove animations feature due to being buggy" +msgstr "" + +#: src/changelog/v2.2.md:20 +msgid "Improve speed of showing cards" +msgstr "" + +#: src/changelog/v2.2.md:21 +msgid "Remove duplicate check dialog when adding new flashcards" +msgstr "" + +#: src/changelog/v2.2.md:22 +msgid "Remove swap button when adding or editing flashcards" +msgstr "" + +#: src/changelog/v2.2.md:23 +msgid "Remove kanji info feature (will become optional plugin in the future)" +msgstr "" + +#: src/changelog/v2.2.md:24 +msgid "Make minimum Android version 2.1" +msgstr "" + +#: src/changelog/v2.2.md:25 +msgid "Fix lots of bugs" +msgstr "" + +#: src/changelog/v2.1.md:1 +msgid "Version 2.1.3 (2014-04-05)" +msgstr "" + +#: src/changelog/v2.1.md:2 +msgid "Create new notes in correct deck" +msgstr "" + +#: src/changelog/v2.1.md:3 +msgid "TTS fixes" +msgstr "" + +#: src/changelog/v2.1.md:5 +msgid "Version 2.1 (2014-03-27)" +msgstr "" + +#: src/changelog/v2.1.md:6 +msgid "Lots of Bug Fixes" +msgstr "" + +#: src/changelog/v2.1.md:7 +msgid "New custom study option with improved tag selection" +msgstr "" + +#: src/changelog/v2.1.md:8 +msgid "New preview card feature in note editor (experimental)" +msgstr "" + +#: src/changelog/v2.1.md:9 +msgid "New override font preference in addition to default font" +msgstr "" + +#: src/changelog/v2.1.md:10 +msgid "New \"Kanji Info\" feature (enabled in preferences->reviewing->Kanji Info)" +msgstr "" + +#: src/changelog/v2.1.md:11 +msgid "Improve Aedict integration" +msgstr "" + +#: src/changelog/v2.1.md:12 +msgid "Support for Samsung Multi-Window" +msgstr "" + +#: src/changelog/v2.1.md:13 +msgid "Fix Some TTS Issues" +msgstr "" + +#: src/changelog/v2.1.md:14 +msgid "Updated Translations" +msgstr "" + +#: src/changelog/v2.1.md:15 +msgid "Remove unused media check when deleting decks" +msgstr "" + +#: src/changelog/v2.1.md:16 +msgid "Significantly increase speed for reducing filtered decks" +msgstr "" + +#: src/changelog/v2.1.md:17 +msgid "Remove upgrade wizard" +msgstr "" + +#: src/changelog/v2.0.md:1 +msgid "Version 2.0.4 (2014-02-03)" +msgstr "" + +#: src/changelog/v2.0.md:2 +msgid "Fix issue with typing answers" +msgstr "" + +#: src/changelog/v2.0.md:3 +msgid "Default font now overrides card font" +msgstr "" + +#: src/changelog/v2.0.md:4 +msgid "Fixed audio playback image being covered by text on Android 2.3" +msgstr "" + +#: src/changelog/v2.0.md:5 +msgid "Fixed reviewer crash when language set to Romanian" +msgstr "" + +#: src/changelog/v2.0.md:6 +msgid "Translation fixes" +msgstr "" + +#: src/changelog/v2.0.md:8 +msgid "Version 2.0.2 (2013-12-15)" +msgstr "" + +#: src/changelog/v2.0.md:9 +msgid "Fixed lots of crashes" +msgstr "" + +#: src/changelog/v2.0.md:10 +msgid "Tablet UI fixes" +msgstr "" + +#: src/changelog/v2.0.md:11 +msgid "Fixed new card ordering issues" +msgstr "" + +#: src/changelog/v2.0.md:12 +msgid "Card appearance now matches desktop Anki. (Centering cards is off by default but can be re-enabled)" +msgstr "" + +#: src/changelog/v2.0.md:13 +msgid "Option groups can now be changed in AnkiDroid" +msgstr "" + +#: src/changelog/v2.0.md:14 +msgid "Clear error message when using a bad template" +msgstr "" + +#: src/changelog/v2.0.md:15 +msgid "Fixed timeboxing notifications" +msgstr "" + +#: src/changelog/v2.0.md:16 +msgid "Properly scale images" +msgstr "" + +#: src/changelog/v2.0.md:17 +msgid "Better custom font handling" +msgstr "" + +#: src/changelog/v2.0.md:18 +msgid "More settings (next day starts at, timeboxing value, etc.)" +msgstr "" + +#: src/changelog/v2.0.md:19 +msgid "Changing AnkiDroid interface language now works." +msgstr "" + +#: src/changelog/v2.0.md:20 +msgid "Fixed import/shared deck download issues (\"not a valid apkg file\")" +msgstr "" + +#: src/changelog/v2.0.md:21 +msgid "Fixed invisible text on Motorola devices" +msgstr "" + +#: src/changelog/v2.0.md:22 +msgid "Focus on answer when revealed" +msgstr "" + +#: src/changelog/v2.0.md:23 +msgid "Filtered decks are now blue in deck list" +msgstr "" + +#: src/changelog/v2.0.md:24 +msgid "Removed unused circle button in note editor" +msgstr "" + +#: src/changelog/v2.0.md:26 +msgid "Version 2.0.1 (2013-02-06)" +msgstr "" + +#: src/changelog/v2.0.md:27 +msgid "Upgrade wizard" +msgstr "" + +#: src/changelog/v2.0.md:28 +msgid "Fix importing apkgs" +msgstr "" + +#: src/changelog/v2.0.md:29 +msgid "Fix media syncing" +msgstr "" + +#: src/changelog/v2.0.md:31 +msgid "Version 2.0 (2013-01-03)" +msgstr "" + +#: src/changelog/v2.0.md:32 +msgid "complete revision" +msgstr "" + +#: src/changelog/v2.0.md:33 +msgid "libanki2.0 scheduling" +msgstr "" + +#: src/changelog/v2.0.md:34 +msgid "new learning mode" +msgstr "" + +#: src/changelog/v2.0.md:35 +msgid "new layout" +msgstr "" + +#: src/changelog/v2.0.md:36 +msgid "merge syncing possible now" +msgstr "" + +#: src/changelog/v2.0.md:37 +msgid "better statistics" +msgstr "" + +#: src/changelog/v2.0.md:38 +msgid "decks are now saved in a single collection" +msgstr "" + +#: src/changelog/v2.0.md:39 +msgid "options are shareable now" +msgstr "" + +#: src/changelog/v2.0.md:40 +msgid "tablet layout" +msgstr "" + +#: src/changelog/v2.0.md:41 +msgid "tons of performance improvements" +msgstr "" + +#: src/changelog/v2.0.md:42 +msgid "card import function" +msgstr "" + +#: src/changelog/v2.0.md:43 +msgid "collection can be saved on internal memory" +msgstr "" + +#: src/changelog/v0.1-to-1.1.3.md:2 +msgid "AnkiDroid has continuously evolved collectively as an open source project, with the first version released to the Google Market on [June 28 2009](http://nicolas-raoul.blogspot.jp/2009/06/just-published-ankidroid-on-market.html). " +msgstr "" + +#: src/changelog/v0.1-to-1.1.3.md:4 +msgid "Version 1.1.3 was the last 1.x version (released on 26th June 2012), before the incompatible AnkiDroid v2.0 was released, essentially rewritten from scratch to be compatible with the new Anki Desktop v2.0." +msgstr "" + diff --git a/po/zh-CN.po b/po/zh-CN.po new file mode 100644 index 0000000..0328619 --- /dev/null +++ b/po/zh-CN.po @@ -0,0 +1,6445 @@ +msgid "" +msgstr "" +"Project-Id-Version: ankidroiddocs\n" +"POT-Creation-Date: 2024-02-01T17:14:41Z\n" +"PO-Revision-Date: 2024-02-01 17:15\n" +"Last-Translator: \n" +"Language-Team: Chinese Simplified\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Crowdin-Project: ankidroiddocs\n" +"X-Crowdin-Project-ID: 645072\n" +"X-Crowdin-Language: zh-CN\n" +"X-Crowdin-File: messages.pot\n" +"X-Crowdin-File-ID: 2\n" + +#: src/SUMMARY.md:1 +msgid "Summary" +msgstr "" + +#: src/SUMMARY.md:3 src/intro.md:1 src/intro.md:1 +msgid "Introduction" +msgstr "导 言" + +#: src/SUMMARY.md:4 src/getting-started.md:1 +msgid "Getting started" +msgstr "入门开始" + +#: src/SUMMARY.md:6 src/deck-picker.md:1 +msgid "The Deck List" +msgstr "牌组列表" + +#: src/SUMMARY.md:8 src/drawer.md:1 +msgid "Navigation Drawer" +msgstr "导航栏" + +#: src/SUMMARY.md:10 src/deck-overview.md:1 +msgid "Deck Overview Screen" +msgstr "牌组概览屏幕" + +#: src/SUMMARY.md:12 src/reviewer.md:1 +msgid "Study Screen" +msgstr "学习屏幕" + +#: src/SUMMARY.md:14 src/adding-notes.md:1 +msgid "Add Note Screen" +msgstr "添加笔记屏幕" + +#: src/SUMMARY.md:16 src/editing-notes.md:1 +msgid "Edit Note Screen" +msgstr "编辑笔记屏幕" + +#: src/SUMMARY.md:18 src/browser.md:1 +msgid "Finding/Searching/Browsing" +msgstr "" + +#: src/SUMMARY.md:20 src/filtered-deck.md:1 +msgid "Filtered Decks" +msgstr "" + +#: src/SUMMARY.md:22 src/importing/importing-anki-files.md:1 +msgid "Importing Anki Files" +msgstr "" + +#: src/SUMMARY.md:23 src/importing/importing-anki-databases.md:1 +msgid "Importing Anki Databases (.anki2)" +msgstr "" + +#: src/SUMMARY.md:25 src/exporting.md:1 +msgid "Exporting Anki Files" +msgstr "" + +#: src/SUMMARY.md:27 src/backups.md:1 +msgid "Automatic Backups" +msgstr "" + +#: src/SUMMARY.md:29 src/settings.md:1 +msgid "Preferences" +msgstr "" + +#: src/SUMMARY.md:31 src/gestures.md:1 +msgid "Gestures" +msgstr "" + +#: src/SUMMARY.md:33 src/note-formatting-toolbar.md:1 +msgid "Note Formatting Toolbar" +msgstr "" + +#: src/SUMMARY.md:35 src/keyboard-shortcuts.md:1 +msgid "Keyboard Shortcuts" +msgstr "" + +#: src/SUMMARY.md:37 src/rtl.md:1 +msgid "Using Right-To-Left Languages with AnkiDroid" +msgstr "" + +#: src/SUMMARY.md:39 src/anki-desktop.md:1 +msgid "Using Anki Desktop with AnkiDroid" +msgstr "" + +#: src/SUMMARY.md:41 src/ankiweb-conflicts.md:1 +msgid "Dealing with merge conflicts on AnkiWeb" +msgstr "" + +#: src/SUMMARY.md:43 src/advanced-features/intro.md:1 +msgid "Advanced Features" +msgstr "" + +#: src/SUMMARY.md:44 src/advanced-features/mathjax.md:1 +msgid "MathJax Support" +msgstr "" + +#: src/SUMMARY.md:45 src/advanced-features/reverse-cards.md:1 +msgid "Reverse Cards" +msgstr "" + +#: src/SUMMARY.md:46 src/advanced-features/custom-fonts.md:1 +msgid "Custom Fonts" +msgstr "" + +#: src/SUMMARY.md:47 src/advanced-features/customizing-card-layout.md:1 +msgid "Custom Card Layout" +msgstr "" + +#: src/SUMMARY.md:48 src/advanced-features/type-in-answer.md:1 +msgid "Type in the answer feature" +msgstr "" + +#: src/SUMMARY.md:49 src/gestures.md:146 +#: src/advanced-features/advanced-statistics.md:1 +msgid "Advanced Statistics" +msgstr "" + +#: src/SUMMARY.md:50 src/advanced-features/reminders.md:1 +msgid "Reminders" +msgstr "" + +#: src/SUMMARY.md:51 src/advanced-features/set-language-hint.md:1 +msgid "Automatic Language Selection" +msgstr "" + +#: src/SUMMARY.md:54 +msgid "Help & Supports" +msgstr "" + +#: src/SUMMARY.md:55 src/beta-testing.md:1 +msgid "Beta testing" +msgstr "" + +#: src/SUMMARY.md:56 src/help.md:33 src/contributing.md:1 +msgid "Contributing to AnkiDroid" +msgstr "" + +#: src/SUMMARY.md:57 +msgid "Changelog" +msgstr "" + +#: src/SUMMARY.md:58 +msgid "Version 2.15" +msgstr "" + +#: src/SUMMARY.md:59 +msgid "Version 2.14" +msgstr "" + +#: src/SUMMARY.md:60 +msgid "Version 2.13" +msgstr "" + +#: src/SUMMARY.md:61 +msgid "Version 2.12" +msgstr "" + +#: src/SUMMARY.md:62 +msgid "Version 2.11" +msgstr "" + +#: src/SUMMARY.md:63 +msgid "Version 2.10" +msgstr "" + +#: src/SUMMARY.md:64 +msgid "Version 2.9" +msgstr "" + +#: src/SUMMARY.md:65 +msgid "Version 2.8" +msgstr "" + +#: src/SUMMARY.md:66 +msgid "Version 2.7" +msgstr "" + +#: src/SUMMARY.md:67 +msgid "Version 2.6" +msgstr "" + +#: src/SUMMARY.md:68 +msgid "Version 2.5" +msgstr "" + +#: src/SUMMARY.md:69 +msgid "Version 2.4" +msgstr "" + +#: src/SUMMARY.md:70 +msgid "Version 2.3" +msgstr "" + +#: src/SUMMARY.md:71 +msgid "Version 2.2" +msgstr "" + +#: src/SUMMARY.md:72 +msgid "Version 2.1" +msgstr "" + +#: src/SUMMARY.md:73 +msgid "Version 2.0" +msgstr "" + +#: src/SUMMARY.md:74 src/changelog/v0.1-to-1.1.3.md:1 +msgid "Version 0.1 to 1.1.3" +msgstr "" + +#: src/intro.md:3 src/intro.md:3 +msgid "Thank you for using AnkiDroid, the Android client for the popular [Anki](http://ankisrs.net) spaced repetition system. " +msgstr "" + +#: src/intro.md:5 src/intro.md:5 +msgid "Anki is spaced repetition technique which is simple but highly effective. It helps you memorize things by automatically repeating them across increasing intervals based on your responses with no need for you to keep track of what to study or when to study it. You create notes (or download shared decks) with content you need to memorize, and the scheduler will make sure you see the content when you need to." +msgstr "" + +#: src/intro.md:7 src/intro.md:7 +msgid "AnkiDroid is intended to be used in conjunction with Anki on your computer. While it is possible to function without it, some tasks are either only possible with, or a lot more efficient with Anki Desktop. Furthermore, it is **strongly recommended** to at least read [`Key Concepts`](https://docs.ankiweb.net/getting-started.html#key-concepts) section of the main Anki manual to understand the terminology used here." +msgstr "" + +#: src/intro.md:9 src/intro.md:9 +msgid "If this manual doesn't contain what you are looking for, please check the [AnkiDroid Wiki](https://github.com/ankidroid/Anki-Android/wiki) for a list of changes, instructions for submitting bug reports and feature requests, a list of frequently asked questions, and much more." +msgstr "" + +#: src/getting-started.md:2 +msgid "To start using AnkiDroid, we need to add some cards to study. From the main screen, tapping the big blue plus button will allow you to either add a new **note** (i.e. create new flashcards), download shared decks (decks that other people have created and shared online), or create new empty decks." +msgstr "" + +#: src/getting-started.md:4 +msgid "Please watch this 5 minute [tutorial video](https://www.youtube.com/watch?v=F2K1gOSdIZA), which gives an introduction to adding, downloading, and studying cards in AnkiDroid. More detailed information can be found in the sections below." +msgstr "" + +#: src/getting-started.md:6 +msgid "If you are an existing user of Anki Desktop wishing to import your decks from the computer, you might like to skip straight to the [using AnkiDroid with Anki Desktop](anki-desktop.md#using-anki-desktop-with-ankidroid) section." +msgstr "" + +#: src/deck-picker.md:3 +msgid "[Add button](#add-button)" +msgstr "" + +#: src/deck-picker.md:4 +msgid "[Add](#add)" +msgstr "" + +#: src/deck-picker.md:5 +msgid "[Get shared decks](#get-shared-decks)" +msgstr "" + +#: src/deck-picker.md:6 +msgid "[Create deck](#create-deck)" +msgstr "" + +#: src/deck-picker.md:7 +msgid "[App Bar](#app-bar)" +msgstr "" + +#: src/deck-picker.md:8 +msgid "[Navigation menu button](#navigation-menu-button)" +msgstr "" + +#: src/deck-picker.md:9 +msgid "[Sync button](#sync-button)" +msgstr "" + +#: src/deck-picker.md:10 +msgid "[Overflow menu button](#overflow-menu-button)" +msgstr "" + +#: src/deck-picker.md:11 +msgid "[Studying a Deck](#studying-a-deck)" +msgstr "" + +#: src/deck-picker.md:12 +msgid "[Other Deck Actions](#other-deck-actions)" +msgstr "" + +#: src/deck-picker.md:13 +msgid "[Rename deck](#rename-deck)" +msgstr "" + +#: src/deck-picker.md:14 +msgid "[Deck options](#deck-options)" +msgstr "" + +#: src/deck-picker.md:15 +msgid "[Custom study](#custom-study)" +msgstr "" + +#: src/deck-picker.md:16 +msgid "[Delete deck](#delete-deck)" +msgstr "" + +#: src/deck-picker.md:17 +msgid "[Export deck](#export-deck)" +msgstr "" + +#: src/deck-picker.md:18 src/deck-overview.md:11 +msgid "[Unbury](#unbury)" +msgstr "" + +#: src/deck-picker.md:19 +msgid "[Rebuild / Empty](#rebuild--empty)" +msgstr "" + +#: src/deck-picker.md:20 +msgid "[Clickable areas on the decks](#clickable-areas-on-the-decks)" +msgstr "" + +#: src/deck-picker.md:21 +msgid "[Deck expander](#deck-expander)" +msgstr "" + +#: src/deck-picker.md:22 +msgid "[Deck name](#deck-name)" +msgstr "" + +#: src/deck-picker.md:23 +msgid "[Count buttons](#count-buttons)" +msgstr "" + +#: src/deck-picker.md:24 +msgid "[Advanced Actions](#advanced-actions)" +msgstr "" + +#: src/deck-picker.md:25 src/gestures.md:11 +msgid "[Undo](#undo)" +msgstr "" + +#: src/deck-picker.md:26 +msgid "[Check database](#check-database)" +msgstr "" + +#: src/deck-picker.md:27 +msgid "[Check media](#check-media)" +msgstr "" + +#: src/deck-picker.md:28 +msgid "[Empty cards](#empty-cards)" +msgstr "" + +#: src/deck-picker.md:29 +msgid "[Restore from backup](#restore-from-backup)" +msgstr "" + +#: src/deck-picker.md:30 +msgid "[Manage note types](#manage-note-types)" +msgstr "" + +#: src/deck-picker.md:31 +msgid "[Import](#import)" +msgstr "" + +#: src/deck-picker.md:32 +msgid "[Export collection](#export-collection)" +msgstr "" + +#: src/deck-picker.md:33 +msgid "[Deck Counts](#deck-counts)" +msgstr "" + +#: src/deck-picker.md:35 +msgid "__Note:__ _This section onwards assumes you understand what [decks and cards](https://docs.ankiweb.net/getting-started.html#key-concepts) are_" +msgstr "" + +#: src/deck-picker.md:37 +msgid "The deck list is the screen you see when you start AnkiDroid. It displays a list of the decks which contain all of your flashcards, and allows you to perform various actions:" +msgstr "" + +#: src/deck-picker.md:39 +msgid "![decks.png](img/1-decks.png)" +msgstr "" + +#: src/deck-picker.md:41 +msgid "Add button" +msgstr "" + +#: src/deck-picker.md:42 +msgid "The big blue + button in the bottom right corner is used to add new material to AnkiDroid. Pressing it expands to give the following three options, which are also described in the [tutorial video](https://www.youtube.com/watch?v=F2K1gOSdIZA)." +msgstr "" + +#: src/deck-picker.md:44 +msgid "Add" +msgstr "" + +#: src/deck-picker.md:45 +msgid "Choose this option if you want to create your own flashcards (notes) with AnkiDroid. \"Notes\" and \"cards\" have specific meanings in Anki, which are [explained in the main Anki manual](https://docs.ankiweb.net/getting-started.html#key-concepts). Please see the tutorial video for a quick introduction to adding notes, or refer to the [adding notes](adding-notes.md#add-note-screen) section below for more detailed information." +msgstr "" + +#: src/deck-picker.md:47 +msgid "Get shared decks" +msgstr "" + +#: src/deck-picker.md:48 +msgid "To download a deck of cards from the internet that another user has contributed:" +msgstr "" + +#: src/deck-picker.md:49 +msgid "Ensure you're connected to the internet." +msgstr "" + +#: src/deck-picker.md:50 +msgid "Tap + and then **Get shared decks**. AnkiWeb will open." +msgstr "" + +#: src/deck-picker.md:51 +msgid "Select a category, or type in a search." +msgstr "" + +#: src/deck-picker.md:52 +msgid "Tap **Info** on a deck you'd like to study." +msgstr "" + +#: src/deck-picker.md:53 +msgid "Scroll down and tap **Download**." +msgstr "" + +#: src/deck-picker.md:54 +msgid "You browser will download the file and display a `download complete` notification. Tap this button." +msgstr "" + +#: src/deck-picker.md:56 +msgid "AnkiDroid will appear, and show a confirmation dialog. Tap the **Add** button." +msgstr "" + +#: src/deck-picker.md:57 +msgid "When the import completes, your deck should be ready to study." +msgstr "" + +#: src/deck-picker.md:59 +msgid "Create deck" +msgstr "" + +#: src/deck-picker.md:60 +msgid "To create a new empty deck:" +msgstr "" + +#: src/deck-picker.md:61 +msgid "Tap the **+** button and choose `Create deck`" +msgstr "" + +#: src/deck-picker.md:62 +msgid "Choose a name for the deck, for example `New Japanese`" +msgstr "" + +#: src/deck-picker.md:63 +msgid "Add cards to it following the `Add` instructions above" +msgstr "" + +#: src/deck-picker.md:65 src/reviewer.md:16 +msgid "App Bar" +msgstr "" + +#: src/deck-picker.md:66 +msgid "At the top of each screen in AnkiDroid is the App Bar, with buttons for performing various actions. The following actions are available from the app bar in the deck list:" +msgstr "" + +#: src/deck-picker.md:69 +msgid "Navigation menu button" +msgstr "" + +#: src/deck-picker.md:70 +msgid "Tapping the icon on the far left will show the [left navigation menu](drawer.md#navigation-drawer) for quickly navigating between the main parts of the app." +msgstr "" + +#: src/deck-picker.md:72 +msgid "Sync button" +msgstr "" + +#: src/deck-picker.md:73 +msgid "The circular button with arrows on the right is for synchronizing your cards with the cloud, as described in the [adding decks from cloud](anki-desktop.md#using-anki-desktop-with-ankidroid) section." +msgstr "" + +#: src/deck-picker.md:75 +msgid "Overflow menu button" +msgstr "" + +#: src/deck-picker.md:76 +msgid "On the far right is the overflow menu which contains less commonly used actions. These actions are described further below." +msgstr "" + +#: src/deck-picker.md:78 +msgid "**Hint:** long tapping on a button in the app bar anywhere in the app will display a textual hint describing what the button does!" +msgstr "" + +#: src/deck-picker.md:80 +msgid "Studying a Deck" +msgstr "" + +#: src/deck-picker.md:81 +msgid "To study the cards in a deck, simply tap on the deck name (or the \"STUDY\" button on a 10\" tablet), and AnkiDroid will switch to study mode. " +msgstr "" + +#: src/deck-picker.md:83 +msgid "Note that the currently selected deck is highlighted with a grey background, and if you have any [filtered decks](filtered-deck.md#filtered-decks) they will be highlighted using a blue font. Filtered decks are discussed elsewhere in the manual." +msgstr "" + +#: src/deck-picker.md:85 +msgid "Other Deck Actions" +msgstr "" + +#: src/deck-picker.md:86 +msgid "Long tapping on a deck will show a list of other actions available to perform on that deck:" +msgstr "" + +#: src/deck-picker.md:88 +msgid "Rename deck" +msgstr "" + +#: src/deck-picker.md:89 +msgid "Use this option to rename a deck" +msgstr "" + +#: src/deck-picker.md:91 src/reviewer.md:46 +msgid "Deck options" +msgstr "" + +#: src/deck-picker.md:92 +msgid "Tapping on deck options allows you to configure various deck specific study options. Please see the [desktop documentation](https://docs.ankiweb.net/deck-options.html) for more information about these study options." +msgstr "" + +#: src/deck-picker.md:95 +msgid "Custom study" +msgstr "" + +#: src/deck-picker.md:96 +msgid "Allows you to choose from some convenient presets for studying outside of your normal schedule, for example increasing the study limit for the day. See the section on [filtered decks](filtered-deck.md#filtered-decks) for more detailed information." +msgstr "" + +#: src/deck-picker.md:98 +msgid "Delete deck" +msgstr "" + +#: src/deck-picker.md:99 +msgid "Use this option to delete a deck (note: this action is not reversible, although you can [restore from a backup](backups.md#automatic-backups)" +msgstr "" + +#: src/deck-picker.md:101 +msgid "Export deck" +msgstr "" + +#: src/deck-picker.md:102 +msgid "This option can be used to share a deck with other users. See the [exporting decks](exporting.md#exporting-anki-files) section for more information." +msgstr "" + +#: src/deck-picker.md:104 src/deck-overview.md:40 +msgid "Unbury" +msgstr "" + +#: src/deck-picker.md:105 src/deck-overview.md:41 +msgid "This option is only visible when the selected deck has cards that have been manually or automatically buried." +msgstr "" + +#: src/deck-picker.md:107 +msgid "Rebuild / Empty" +msgstr "" + +#: src/deck-picker.md:108 +msgid "If the selected deck is a [filtered decks](filtered-deck.md#filtered-decks) then you also have the option to rebuild or empty the cards in it." +msgstr "" + +#: src/deck-picker.md:111 +msgid "Clickable areas on the decks" +msgstr "" + +#: src/deck-picker.md:112 +msgid "Each deck in the list has three clickable areas:" +msgstr "" + +#: src/deck-picker.md:114 +msgid "Deck expander" +msgstr "" + +#: src/deck-picker.md:115 +msgid "If you are using [subdecks](https://docs.ankiweb.net/getting-started.html#decks), then a deck expander button may appear on the far left of the deck, which can be used to show / hide the subdecks. A ▶ icon means the deck has hidden subdecks which can be shown, a ▼ icon means the deck has visible subdecks that can be hidden, and no icon means that the deck has no subdecks. " +msgstr "" + +#: src/deck-picker.md:117 +msgid "**Note:** subdecks can be created by using the naming convention `PARENT::CHILD`." +msgstr "" + +#: src/deck-picker.md:119 +msgid "Deck name" +msgstr "" + +#: src/deck-picker.md:120 +msgid "This is the main clickable area, which will take you to the study screen if there are cards available to review." +msgstr "" + +#: src/deck-picker.md:122 +msgid "Count buttons" +msgstr "" + +#: src/deck-picker.md:123 +msgid "The count buttons on the far right of each deck act as a separate clickable area that takes you to the deck overview instead of the study screen. This can be useful if you want to quickly view the number of cards available in the deck." +msgstr "" + +#: src/deck-picker.md:125 +msgid "Advanced Actions" +msgstr "" + +#: src/deck-picker.md:126 +msgid "Some additional actions are located in the overflow menu for less common tasks, which are summarized below:" +msgstr "" + +#: src/deck-picker.md:128 src/reviewer.md:19 src/gestures.md:88 +#: src/keyboard-shortcuts.md:28 +msgid "Undo" +msgstr "" + +#: src/deck-picker.md:129 +msgid "After reviewing the last card in a study session, you can undo it from here." +msgstr "" + +#: src/deck-picker.md:131 +msgid "Check database" +msgstr "" + +#: src/deck-picker.md:132 +msgid "This can automatically fix a lot of problems with your database, and will also purge any unused tags. If you experience any problems with your collection, this is the first action you should try. " +msgstr "" + +#: src/deck-picker.md:134 +msgid "**NOTE:** Under some circumstances, check database will move cards to a deck named _!Recovered Cards_. If this occurs, please move the cards to an appropriate deck via the [card browser](browser.md#findingsearchingbrowsing), and delete _!Recovered Cards_ when it is empty." +msgstr "" + +#: src/deck-picker.md:136 +msgid "Check media" +msgstr "" + +#: src/deck-picker.md:137 +msgid "Try to run this if you experience any issues with media syncing." +msgstr "" + +#: src/deck-picker.md:139 +msgid "Empty cards" +msgstr "" + +#: src/deck-picker.md:140 +msgid "Remove any empty cards from your collection. See the [desktop documentation](https://docs.ankiweb.net/templates/generation.html#card-generation--deletion) for more." +msgstr "" + +#: src/deck-picker.md:142 +msgid "Restore from backup" +msgstr "" + +#: src/deck-picker.md:143 +msgid "Allows you to restore from one of AnkiDroid's [automatic backups](backups.md#automatic-backups)" +msgstr "" + +#: src/deck-picker.md:145 +msgid "Manage note types" +msgstr "" + +#: src/deck-picker.md:146 +msgid "Allows you to add, edit, and delete note types. See the [customizing card layout](advanced-features/customizing-card-layout.md) section for more help with this advanced feature.Keyboard Shortcuts" +msgstr "" + +#: src/deck-picker.md:148 +msgid "Import" +msgstr "" + +#: src/deck-picker.md:149 +msgid "Import a .apkg anki file containing a deck. See the [importing](importing/importing-anki-files.md) section for more." +msgstr "" + +#: src/deck-picker.md:151 +msgid "Export collection" +msgstr "" + +#: src/deck-picker.md:152 +msgid "Export entire collection as a collection.apkg file. See the [exporting](exporting.md) section for more." +msgstr "" + +#: src/deck-picker.md:154 +msgid "Deck Counts" +msgstr "" + +#: src/deck-picker.md:155 +msgid "Next to each deck, three numbers are displayed. The left, blue number, corresponds to how many new cards you have to learn today. Anki will introduce 20 new cards a day by default, and you can customize this number if you'd like. The red number in the middle is for the cards due to be studied today which are currently in the learning phase, and the green number is the cards which are due for review (i.e. cards which have already graduated from the learning phase). On a deck you've never studied before, these numbers will both be zero." +msgstr "" + +#: src/deck-picker.md:157 +msgid "As explained above, tapping on the counts will take you to the deck overview screen." +msgstr "" + +#: src/drawer.md:3 +msgid "![navigation_drawer.png](img/2-navigation_drawer.png)" +msgstr "" + +#: src/drawer.md:5 +msgid "The navigation drawer can be opened from most places in the application by pressing the left menu icon, or alternatively swiping outwards from anywhere on the far left side of the screen. It is used for quickly navigating between different parts of the application. You can switch to the following screens:" +msgstr "" + +#: src/drawer.md:9 +msgid "Decks" +msgstr "" + +#: src/drawer.md:10 +msgid "Takes you to the top level of the app where the list of cards are shown ([more info here](deck-picker.md))" +msgstr "" + +#: src/drawer.md:12 src/keyboard-shortcuts.md:8 src/keyboard-shortcuts.md:51 +msgid "Card Browser" +msgstr "" + +#: src/drawer.md:13 +msgid "Shows a list of all your cards ([more info here](browser.md))" +msgstr "" + +#: src/drawer.md:15 +msgid "Statistics" +msgstr "" + +#: src/drawer.md:16 +msgid "Helps you track your study progress ([more info in Anki manual](https://docs.ankiweb.net/stats.html#statistics) and [here](advanced-features/advanced-statistics.md))" +msgstr "" + +#: src/drawer.md:18 +msgid "Night mode" +msgstr "" + +#: src/drawer.md:19 +msgid "This switches the app to a dark theme which many users find is less straining on the eyes, particularly when reviewing in the dark. See the " +msgstr "" + +#: src/drawer.md:19 +msgid "wiki" +msgstr "" + +#: src/drawer.md:19 +msgid " for instructions on how to customize the card background and font color used in night mode." +msgstr "" + +#: src/drawer.md:21 +msgid "Settings" +msgstr "" + +#: src/drawer.md:22 +msgid "Allows you to customize the app ([more info here](settings.md))" +msgstr "" + +#: src/drawer.md:24 +msgid "Help" +msgstr "" + +#: src/drawer.md:25 +msgid "Opens this web page" +msgstr "" + +#: src/drawer.md:27 +msgid "Send feedback" +msgstr "" + +#: src/drawer.md:28 +msgid "Get support from the AnkiDroid team" +msgstr "" + +#: src/deck-overview.md:3 +msgid "[App bar](#app-bar)" +msgstr "" + +#: src/deck-overview.md:4 +msgid "[Ordinary decks](#ordinary-decks)" +msgstr "" + +#: src/deck-overview.md:5 +msgid "[Custom Study](#custom-study)" +msgstr "" + +#: src/deck-overview.md:6 +msgid "[Filtered decks](#filtered-decks)" +msgstr "" + +#: src/deck-overview.md:7 +msgid "[Empty deck](#empty-deck)" +msgstr "" + +#: src/deck-overview.md:8 +msgid "[Rebuild deck](#rebuild-deck)" +msgstr "" + +#: src/deck-overview.md:9 +msgid "[Overflow menu](#overflow-menu)" +msgstr "" + +#: src/deck-overview.md:10 +msgid "[Deck Options](#deck-options)" +msgstr "" + +#: src/deck-overview.md:13 +msgid "![deck_overview.png](img/3-deck_overview.png)" +msgstr "" + +#: src/deck-overview.md:15 +msgid "From the deck list, if you tap the counts area you will be taken to the deck overview screen. On tablets it is always shown in the area to the right of the deck list." +msgstr "" + +#: src/deck-overview.md:17 +msgid "On this screen you can view a summary of the deck, build custom study sessions, rebuild / empty filtered decks, and change deck options. When visible, pressing the study button will take you to the study screen for that deck." +msgstr "" + +#: src/deck-overview.md:19 +msgid "App bar" +msgstr "" + +#: src/deck-overview.md:20 +msgid "The icons that are shown in the app bar depend on whether your deck is an ordinary deck or a filtered deck." +msgstr "" + +#: src/deck-overview.md:22 +msgid "Ordinary decks" +msgstr "" + +#: src/deck-overview.md:24 +msgid "Custom Study" +msgstr "" + +#: src/deck-overview.md:25 +msgid "Tapping the wrench icon allows you to create a custom session, for example to do extra reviews outside your normal schedule, or study only certain cards inside a deck. See the [filtered deck section](filtered-deck.md) for more information on this." +msgstr "" + +#: src/deck-overview.md:27 +msgid "Filtered decks" +msgstr "" + +#: src/deck-overview.md:29 +msgid "Empty deck" +msgstr "" + +#: src/deck-overview.md:30 +msgid "Tapping the cross icon will empty all of the cards in the current filtered deck (i.e. return them to their original deck)." +msgstr "" + +#: src/deck-overview.md:32 +msgid "Rebuild deck" +msgstr "" + +#: src/deck-overview.md:33 +msgid "Tapping the rebuild icon will rebuild the current filtered deck according to the settings specified in filtered deck options." +msgstr "" + +#: src/deck-overview.md:35 +msgid "Overflow menu" +msgstr "" + +#: src/deck-overview.md:37 +msgid "Deck Options" +msgstr "" + +#: src/deck-overview.md:38 +msgid "Allows you to configure some options related to the current deck, such as the number of new cards and reviews to introduce each day. Please see the [desktop documentation](https://docs.ankiweb.net/deck-options.html) for more information about these study options." +msgstr "" + +#: src/reviewer.md:3 +msgid "Tapping on the deck name from the deck list, or the study button from the deck overview screen will take you to the study screen where you do your study. " +msgstr "" + +#: src/reviewer.md:5 +msgid "![reviewer.png](img/4-reviewer.png)" +msgstr "" + +#: src/reviewer.md:7 +msgid "Basics" +msgstr "" + +#: src/reviewer.md:8 +msgid "If you have not used Anki on a computer before, you may like to have a look at the first [intro video](https://docs.ankiweb.net/getting-started.html#videos) before reading on, as it explains the basic review process." +msgstr "" + +#: src/reviewer.md:10 +msgid "On the top left of the screen you'll see three numbers. From the left, these correspond to new cards, learning cards, and cards to review. These are explained in more detail in the intro videos for the desktop program, so please [check them out](https://docs.ankiweb.net/getting-started.html#videos) if you haven't already." +msgstr "" + +#: src/reviewer.md:12 +msgid "When you've looked at a card's question and remembered the answer, or decided you don't know it, tap the **show answer** button. When you do, the bottom area will change to display 2-4 answer buttons, depending on how you've answered the card previously. The buttons will display the time a card will next be shown, so 10m means **10 minutes** and **5d** means **5 days**. You can tap directly on these buttons to choose a particular answer. " +msgstr "" + +#: src/reviewer.md:14 +msgid "To make reviewing faster, you can configure gestures (for example taps and swipes) to answer cards without using the buttons. See the [preferences section](settings.md) for more information on configuring gestures." +msgstr "" + +#: src/reviewer.md:17 +msgid "The App Bar at the top of the study screen has several buttons for performing various common actions. The number of buttons which are shown is determined automatically by Android based on the size and resolution of your screen. If there is not enough space to show the button for a given action, then the action will be available from the menu instead. If you are unsure what a button does, you can long-tap on it to see the name of the action. The following action are available:" +msgstr "" + +#: src/reviewer.md:20 +msgid "Undo the answer you chose for the last card you studied (button always shown)." +msgstr "" + +#: src/reviewer.md:22 +msgid "Mark Card" +msgstr "" + +#: src/reviewer.md:23 +msgid "Adds a **marked** tag to the current note, so it can be easily found in the browser. This is useful when you want to take some action on the note at a later date, such as looking up a word when you get home. Marked cards also show a small star in the upper-right-hand corner during reviews." +msgstr "" + +#: src/reviewer.md:26 +msgid "Flag Card" +msgstr "" + +#: src/reviewer.md:27 +msgid "Adds a color coded **flag** (red, orange, green, or blue) This can be used as a general purpose indicator to differentiate your cards. Flags are represented by a number from 1-4, corresponding to the previously listed colors." +msgstr "" + +#: src/reviewer.md:30 +msgid "Edit Card" +msgstr "" + +#: src/reviewer.md:31 +msgid "Open the edit note screen, where you can change the content displayed on the flashcard (see the [editing notes section](editing-notes.md) for more help)" +msgstr "" + +#: src/reviewer.md:33 +msgid "Hide / Delete" +msgstr "" + +#: src/reviewer.md:34 +msgid "Give options to bury, suspend, or delete the current note or card" +msgstr "" + +#: src/reviewer.md:36 +msgid "**Bury card / Bury note:** Hides a card or all of the note’s cards from review until the next day. (If you want to unbury cards before then, you can choose “unbury” from the long-press menu in the [deck list](deck-picker.md), or from the [deck overview screen](deck-overview.md).) This is useful if you cannot answer the card at the moment or you want to come back to it another time. Burying can also happen automatically for cards of the same note. If cards were in learning when they are buried, they are moved back to the new card queue or review queue prior to being buried." +msgstr "" + +#: src/reviewer.md:37 +msgid "**Suspend card / Suspend note:** Hides a card or all of the note’s cards from review until they are manually unsuspended (by long-tapping a card in the [card browser](browser.md)). This is useful if you want to avoid reviewing the note for some time, but don’t want to delete it. If cards were in learning when they are suspended, they are moved back to the new card queue or review queue prior to being suspended." +msgstr "" + +#: src/reviewer.md:38 +msgid "**Delete note:** Deletes the note and all of its cards." +msgstr "" + +#: src/reviewer.md:40 +msgid "Replay Audio" +msgstr "" + +#: src/reviewer.md:41 +msgid "If the card has audio on the front or back, it will be played again." +msgstr "" + +#: src/reviewer.md:43 +msgid "Enable / Disable Whiteboard" +msgstr "" + +#: src/reviewer.md:44 +msgid "This action enables or disables the whiteboard feature for the current deck. The whiteboard feature allows you to draw on the screen, which is particularly useful for practicing drawing characters from languages such as Japanese. When the whiteboard has been enabled for the current deck, two new actions will become available for clearing and hiding the whiteboard. Disabling the whiteboard will hide these actions as well as the whiteboard itself." +msgstr "" + +#: src/reviewer.md:47 +msgid "Open the deck specific study options. See the [desktop documentation](https://docs.ankiweb.net/deck-options.html) for more information about these study options." +msgstr "" + +#: src/reviewer.md:49 +msgid "Check Pronunciation" +msgstr "" + +#: src/reviewer.md:50 +msgid "This action enables or disables the temporary audio recorder toolbar at the top of the card. This feature allows you to record your voice and replay it. It is used primarily to check your pronunciation. This toolbar is composed of three buttons: play, stop playing and record microphone audio. This tool can be used while viewing either the question or the answer." +msgstr "" + +#: src/reviewer.md:52 +msgid "Reaching the end of the study session" +msgstr "" + +#: src/reviewer.md:53 +msgid "When you've finished the cards that are due to be studied today, you'll be taken back to the decks list and shown a congratulations message. From here you can select a different deck, or if you've finished studying for the day, you can simply tap the home button in order to close AnkiDroid (and you can also do this in the middle of reviews if you wish)." +msgstr "" + +#: src/reviewer.md:55 +msgid "If you wish to keep studying the same deck further, tap on the deck again which will give you several options for continued study. Please see the [filtered deck](filtered-deck.md) section for more on custom study." +msgstr "" + +#: src/adding-notes.md:3 +msgid "[Type](#type)" +msgstr "" + +#: src/adding-notes.md:4 +msgid "[Deck](#deck)" +msgstr "" + +#: src/adding-notes.md:5 +msgid "[Fields](#fields)" +msgstr "" + +#: src/adding-notes.md:6 +msgid "[Media Buttons](#media-buttons)" +msgstr "" + +#: src/adding-notes.md:7 +msgid "[Tags](#tags)" +msgstr "" + +#: src/adding-notes.md:8 +msgid "[Cards](#cards)" +msgstr "" + +#: src/adding-notes.md:10 +msgid "__Note:__ _This section onwards assumes you understand what [notes, fields, card templates, and note types](https://docs.ankiweb.net/getting-started.html#notes--fields) are_" +msgstr "" + +#: src/adding-notes.md:12 +msgid "To add a new note, tap the **+** button at the bottom of the deck list and choose **Add**." +msgstr "" + +#: src/adding-notes.md:14 +msgid "![adding.png](img/5-adding.png)" +msgstr "" + +#: src/adding-notes.md:16 +msgid "The following controls are available in the add note screen:" +msgstr "" + +#: src/adding-notes.md:18 +msgid "Type" +msgstr "" + +#: src/adding-notes.md:19 +msgid "Allows you to select the type of note you'd like to add. For most purposes the **Basic** note type is sufficient, but for example if you would like an extra card generated which is the reverse of the main card (i.e. shows the **Back** field on the front of the card), you could chose the **Basic (and reversed card)** note type." +msgstr "" + +#: src/adding-notes.md:22 +msgid "Deck" +msgstr "" + +#: src/adding-notes.md:23 +msgid "Allows you to change the deck the generated card/cards will be added to." +msgstr "" + +#: src/adding-notes.md:25 +msgid "Fields" +msgstr "" + +#: src/adding-notes.md:26 +msgid "Below the deck selector are the fields for the note (for example the **Basic** note type has two fields **Front** and **Back**). When you tap on a field, a keyboard will come up, allowing you to type in information." +msgstr "" + +#: src/adding-notes.md:28 +msgid "Media Buttons" +msgstr "" + +#: src/adding-notes.md:29 +msgid "Next to each field is an attach icon, which allows you to add media to your note (this feature is currently in the experimental phase). \n" +"Add image lets you add images either via your device's camera (if it has one), or from your photo library. Record audio allows you to record your voice and place it into a field. The advanced editor lets you automatically search for translations or pronunciation audio files online." +msgstr "" + +#: src/adding-notes.md:33 +msgid "Tags" +msgstr "" + +#: src/adding-notes.md:34 +msgid "Brings up a dialog which lets you add / remove tags from the note." +msgstr "" + +#: src/adding-notes.md:36 +msgid "Cards" +msgstr "" + +#: src/adding-notes.md:37 +msgid "Shows the names of the cards which will be generated for the selected note type. Tapping on this button will bring up a dialog which lets you preview the source code for the card template of the selected note type. From here you can edit, preview, add, and delete card templates. See the [cards and templates section](https://docs.ankiweb.net/templates/intro.html) of the Anki Desktop manual for more information about card templates." +msgstr "" + +#: src/adding-notes.md:39 +msgid "Long press in a text entry field to add a cloze deletion around the selected text, or an empty cloze deletion if there is no selected text." +msgstr "" + +#: src/adding-notes.md:41 +msgid "When you've finished typing in the content of a note, tap the tick icon in the app bar at the top to add it to your collection. Alternatively, if you want to go back to what you were doing without saving, you can tap the app icon, or use the hardware back button." +msgstr "" + +#: src/editing-notes.md:2 +msgid "The edit note screen can be opened by choosing edit while reviewing, or by opening a card in the browser. The edit screen is similar to the add new note screen mentioned above, with some key differences:" +msgstr "" + +#: src/editing-notes.md:5 +msgid "Changing the deck operates on the selected card (which is underlined in the **Cards** box). If a note type is chosen which has more than one card, only the currently selected card will be moved to the new deck." +msgstr "" + +#: src/editing-notes.md:8 +msgid "Changing the **Type** dropdown selector changes to the note type edit mode. In this mode, editing the content of the note (i.e. deck, fields, etc) is disabled, and if a custom note type with more than two fields is being used, additional buttons will appear which let you control the mapping of the fields to the new note type." +msgstr "" + +#: src/editing-notes.md:11 +msgid "If a note type is selected which has less cards than the original note type, only the first n cards will be kept. For example changing from **Basic (and reversed card)** to **Basic** will lead to only the first card being kept. To warn you of this, the text in the **Cards** box will appear red, and a confirmation dialog will be shown before the note is saved." +msgstr "" + +#: src/editing-notes.md:14 +msgid "Hint: to change the type for multiple notes in one go, or to customize the mapping between cards, use the **Change note type** option in the browser on Anki Desktop." +msgstr "" + +#: src/editing-notes.md:16 +msgid "There are also several advanced options available in the main menu:" +msgstr "" + +#: src/editing-notes.md:18 +msgid "Add note" +msgstr "" + +#: src/editing-notes.md:19 +msgid "Create a new empty note" +msgstr "" + +#: src/editing-notes.md:21 +msgid "Copy card" +msgstr "" + +#: src/editing-notes.md:22 +msgid "Copy the current note to a new editable note" +msgstr "" + +#: src/editing-notes.md:24 +msgid "Reset progress" +msgstr "" + +#: src/editing-notes.md:25 +msgid "Move the card to the end of the new card queue. The current state of the card is cleared, but not its revision history." +msgstr "" + +#: src/editing-notes.md:27 src/keyboard-shortcuts.md:59 +msgid "Reschedule" +msgstr "" + +#: src/editing-notes.md:28 +msgid "Allows you to reschedule as a review card on a given date. This is useful if you have imported already-learnt material, and you want to start it off with higher initial intervals." +msgstr "" + +#: src/browser.md:9 +msgid "[Searching](#searching)" +msgstr "" + +#: src/browser.md:10 +msgid "[tag:marked](#tagmarked)" +msgstr "" + +#: src/browser.md:11 +msgid "[is:due](#isdue)" +msgstr "" + +#: src/browser.md:12 +msgid "[front:rabbit](#frontrabbit)" +msgstr "" + +#: src/browser.md:13 +msgid "[flag:1](#flag1)" +msgstr "" + +#: src/browser.md:15 +msgid "You can search for or browse cards by tapping the **Card browser** button from the [navigation drawer](drawer.md)." +msgstr "" + +#: src/browser.md:17 +msgid "![img/6-browser.png](img/6-browser.png)" +msgstr "" + +#: src/browser.md:19 +msgid "The browser screen starts by displaying all the cards in the currently selected deck. You can search for cards in the selected deck by tapping the magnifying glass icon in the top. You can change the selected deck (or change to all decks) by choosing the deck from the dropdown list on the top left." +msgstr "" + +#: src/browser.md:21 +msgid "By default, the first column in the browser gives the text which will be shown on the question (i.e. front side) of the flashcard, and the second column shows the text from the answer (i.e. the back side) of the flashcard. " +msgstr "" + +#: src/browser.md:23 +msgid "The first column can also be configured to show the [sort field](https://docs.ankiweb.net/editing.html#customizing-fields) for a more compact display. The second column can be configured to show many different parameters by tapping the drop down menu in the column heading. " +msgstr "" + +#: src/browser.md:25 +msgid "Note that the content of the columns is dynamically calculated as your scroll through the list of the cards." +msgstr "" + +#: src/browser.md:27 +msgid "From the search results, you can tap on a card to edit it (see the [edit note section](editing-notes.md) above), or long-tapping on it will show a menu allowing you to perform the following actions:" +msgstr "" + +#: src/browser.md:29 +msgid "Mark / unmark note" +msgstr "" + +#: src/browser.md:30 +msgid "Add / remove the **marked** tag from the note. Cards with a marked note are highlighted in purple." +msgstr "" + +#: src/browser.md:32 +msgid "Flag card" +msgstr "" + +#: src/browser.md:33 +msgid "Change or remove the color coded **flag** on the card. Cards with a flag are highlighted in the flags color." +msgstr "" + +#: src/browser.md:35 +msgid "Suspend / unsuspend card" +msgstr "" + +#: src/browser.md:36 +msgid "Suspended cards are highlighted in yellow, and are not shown during review." +msgstr "" + +#: src/browser.md:38 src/gestures.md:107 +msgid "Delete note" +msgstr "" + +#: src/browser.md:39 +msgid "Delete the note of the currently selected card, and all cards belonging to that note. This action cannot be undone without [restoring from backup](backups.md)." +msgstr "" + +#: src/browser.md:41 +msgid "Preview" +msgstr "" + +#: src/browser.md:42 +msgid "Render the currently selected card so that you can see what it looks like in the reviewer." +msgstr "" + +#: src/browser.md:44 +msgid "Select multiple cards" +msgstr "" + +#: src/browser.md:45 +msgid "Long-tapping on a single card will select the single card. While that card is selected, if you long-tap on another card on your screen, then all of the cards between the first selected card and the last card will be selected. This allows for actions to be performed on multiple cards at once." +msgstr "" + +#: src/browser.md:47 +msgid "Searching" +msgstr "" + +#: src/browser.md:48 +msgid "AnkiDroid supports all the search strings that the desktop version of Anki does, allowing you to perform quite complex searches. Some examples:" +msgstr "" + +#: src/browser.md:50 +msgid "tag:marked" +msgstr "" + +#: src/browser.md:51 +msgid "show cards that with the tag **marked**" +msgstr "" + +#: src/browser.md:53 +msgid "is:due" +msgstr "" + +#: src/browser.md:54 +msgid "show only cards that are waiting for review" +msgstr "" + +#: src/browser.md:56 +msgid "front:rabbit" +msgstr "" + +#: src/browser.md:57 +msgid "show only cards where the front field is exactly **rabbit** " +msgstr "" + +#: src/browser.md:59 +msgid "flag:1" +msgstr "" + +#: src/browser.md:60 +msgid "show only cards marked with a red flag" +msgstr "" + +#: src/browser.md:62 +msgid "For a full list of the possibilities, please see the section in the [desktop manual](https://docs.ankiweb.net/searching.html)." +msgstr "" + +#: src/browser.md:64 +msgid "Alternatively, some more commonly used filters (marked, suspended, and tagged cards) can be quickly applied without manually typing them by choosing them from the overflow menu. You can also save and recall common search queries from the menu." +msgstr "" + +#: src/filtered-deck.md:3 +msgid "Anki is designed to optimize the learning process, so that you study the minimum amount necessary to remember the majority of your cards. Once the congratulations screen is reached, further study becomes a case of diminishing returns: the amount of extra time spent going over the same cards again is generally not worth the moderate increase in retention you'll see." +msgstr "" + +#: src/filtered-deck.md:5 +msgid "That said, if you have a test looming, or simply want to pass some time, it's possible to keep reviewing even after you are shown the congratulations message." +msgstr "" + +#: src/filtered-deck.md:7 +msgid "A **filtered deck** is a temporary deck that contains cards based on various criteria, such as **forgotten today**, `is tagged 'hard'`, and so on. After studying cards in a filtered deck, or when the filtered deck is deleted, the cards are automatically returned to their original deck." +msgstr "" + +#: src/filtered-deck.md:9 +msgid "The easiest way to create a filtered deck is by long clicking on a deck and choosing the **custom study** option. " +msgstr "" + +#: src/filtered-deck.md:11 +msgid "Advanced users can create a filtered deck manually, by choosing **Create filtered deck** from the overflow menu in the deck list screen." +msgstr "" + +#: src/filtered-deck.md:13 +msgid "For further information on filtered decks, please see the [desktop documentation](https://docs.ankiweb.net/filtered-decks.html#filtered-decks--cramming)." +msgstr "" + +#: src/importing/importing-anki-files.md:3 +msgid "You can import Anki files (with .apkg file format) directly into AnkiDroid. Other file formats cannot be imported directly into AnkiDroid, however flashcards from most other applications can be imported into Anki Desktop on your computer, which can then be [added into AnkiDroid in the usual way](../anki-desktop.md). See the [importing section of the Anki Desktop manual](https://docs.ankiweb.net/importing/intro.html) for help on importing into Anki Desktop." +msgstr "" + +#: src/importing/importing-anki-files.md:6 +msgid "As in Anki Desktop, AnkiDroid distinguishes between [the two types of .apkg files](https://docs.ankiweb.net/exporting.html) (**collection package** and **deck package**) based on the filename. Collection packages have the name **collection.colpkg**, and when imported will completely _replace all contents_ in AnkiDroid. Any apkg file which is **_not_** named something that ends in **.colpkg** will be treated as a deck package, which will be _merged with any existing content_ when imported into to AnkiDroid." +msgstr "" + +#: src/importing/importing-anki-files.md:8 +msgid "You can import .apkg Anki collection files into AnkiDroid either by opening them using the standard Android system, or by manually importing them from within AnkiDroid:" +msgstr "" + +#: src/importing/importing-anki-files.md:10 +msgid "Open the file using Android" +msgstr "" + +#: src/importing/importing-anki-files.md:11 +msgid "Apkg files are automatically associated with AnkiDroid, so for example if you open a .apkg email attachment which you sent to yourself, then AnkiDroid will automatically open the file and confirm if you want to import it. Simply click OK and the apkg file will be imported." +msgstr "" + +#: src/importing/importing-anki-files.md:13 +msgid "Import the file manually in AnkiDroid" +msgstr "" + +#: src/importing/importing-anki-files.md:14 +msgid "You can also manually import .apkg files as follows:" +msgstr "" + +#: src/importing/importing-anki-files.md:16 +msgid "Connect your device to your computer using USB" +msgstr "" + +#: src/importing/importing-anki-files.md:17 +msgid "Copy the .apkg from your computer to the AnkiDroid folder on your device" +msgstr "" + +#: src/importing/importing-anki-files.md:18 +msgid "Open AnkiDroid on your device" +msgstr "" + +#: src/importing/importing-anki-files.md:19 +msgid "From the main menu in the deck list, choose _Import_" +msgstr "" + +#: src/importing/importing-anki-files.md:20 +msgid "Choose the apkg file you just copied to your device when prompted" +msgstr "" + +#: src/importing/importing-anki-files.md:21 +msgid "Tap OK" +msgstr "" + +#: src/importing/importing-anki-databases.md:3 +msgid "AnkiDroid does not support directly importing Anki database (`.anki2`) files. A database import will replace your collection with the contents the provided file. If you want to perform a full replacement, you should import a `collection[.apkg/.colpkg]` created in the app with the export function." +msgstr "" + +#: src/importing/importing-anki-databases.md:5 +msgid "Importing anki2 files manually" +msgstr "" + +#: src/importing/importing-anki-databases.md:7 +msgid "This is not officially supported, but `.anki2` files can manually be imported if needed, in cases of troubleshooting for example:" +msgstr "" + +#: src/importing/importing-anki-databases.md:9 +msgid "Create a new folder on your Android file system" +msgstr "" + +#: src/importing/importing-anki-databases.md:10 +msgid "Obtain the full path to the folder as provided by your file manager, this will typically appear as: `/storage/emulated/0/`" +msgstr "" + +#: src/importing/importing-anki-databases.md:11 +msgid "Place the `.anki2` file in the newly created folder" +msgstr "" + +#: src/importing/importing-anki-databases.md:12 +msgid "Rename the file to `collection.anki2`" +msgstr "" + +#: src/importing/importing-anki-databases.md:13 +msgid "(If applicable) Temporarily log out of your AnkiWeb account: `Settings - AnkiDroid - AnkiWeb account`" +msgstr "" + +#: src/importing/importing-anki-databases.md:14 +msgid "Open `Settings - Advanced - AnkiDroid Directory` and set the AnkiDroid Directory to the newly created folder." +msgstr "" + +#: src/exporting.md:3 +msgid "AnkiDroid can export your flashcards in the .apkg Anki file format so that you can import them into Anki Desktop, or share them with other people. As in Anki Desktop, you can either export a [collection package or deck package](https://docs.ankiweb.net/exporting.html#packaged-decks), depending on what you are trying to achieve." +msgstr "" + +#: src/exporting.md:6 +msgid "There are two export options available: **include scheduling information** and **include media**. Generally the default options are sufficient, if you choose not to include scheduling information, Anki will assume that you are sharing the deck with other people, and will remove marked and leech tags so that they will have a clean copy of it." +msgstr "" + +#: src/exporting.md:8 +msgid "Exporting collection package" +msgstr "" + +#: src/exporting.md:9 +msgid "When exporting for use in Anki Desktop, you generally want to [export your entire collection](https://docs.ankiweb.net/exporting.html#collection-colpkg), including all your review history etc. " +msgstr "" + +#: src/exporting.md:11 src/exporting.md:28 +msgid "From the main menu in the decks screen:" +msgstr "" + +#: src/exporting.md:13 +msgid "Tap the **Export** item in the menu." +msgstr "" + +#: src/exporting.md:14 +msgid "Tap **OK** using default options" +msgstr "" + +#: src/exporting.md:15 +msgid "Tap **OK** again to email the exported collection.apkg file to yourself, or alternatively you can manually copy to your computer using USB" +msgstr "" + +#: src/exporting.md:17 +msgid "To import the file on your computer:" +msgstr "" + +#: src/exporting.md:19 +msgid "Save the file **collection.apkg** to your desktop" +msgstr "" + +#: src/exporting.md:20 +msgid "Double-click on the file to start Anki." +msgstr "" + +#: src/exporting.md:21 +msgid "Confirm you wish to replace, so that the deck from your mobile device overwrites the old data on your desktop." +msgstr "" + +#: src/exporting.md:23 +msgid "After importing, you can delete the apkg file on your desktop if you wish." +msgstr "" + +#: src/exporting.md:25 +msgid "Exporting deck package" +msgstr "" + +#: src/exporting.md:26 +msgid "If you want to share a deck in AnkiDroid with another user, you can export a deck package. " +msgstr "" + +#: src/exporting.md:30 +msgid "Long tap on the deck you wish to export" +msgstr "" + +#: src/exporting.md:31 +msgid "Tap **Export**" +msgstr "" + +#: src/exporting.md:32 +msgid "Tap **OK** using the default options" +msgstr "" + +#: src/exporting.md:33 +msgid "Tap **OK** again to email the exported apkg to another user" +msgstr "" + +#: src/backups.md:3 +msgid "AnkiDroid will automatically create backups of your collection for you. The backups include all your cards and statistics, but do not include sounds or images." +msgstr "" + +#: src/backups.md:5 +msgid "The backup is taken in the background when you first start the app. A backup will only happen if more than 5 hours has elapsed since the last time a backup was created. By default, AnkiDroid will store the last 8 backups; this number can be changed in the main settings." +msgstr "" + +#: src/backups.md:8 +msgid "You can restore a backup by choosing the _restore from backup_ option from the main menu of the [decks screen](deck-picker.md)." +msgstr "" + +#: src/settings.md:3 +msgid "[AnkiDroid](#ankidroid)" +msgstr "" + +#: src/settings.md:4 +msgid "[AnkiWeb account](#ankiweb-account)" +msgstr "" + +#: src/settings.md:5 +msgid "[Fetch media on sync](#fetch-media-on-sync)" +msgstr "" + +#: src/settings.md:6 +msgid "[Automatic synchronization](#automatic-synchronization)" +msgstr "" + +#: src/settings.md:7 +msgid "[Deck for new cards](#deck-for-new-cards)" +msgstr "" + +#: src/settings.md:8 +msgid "[Language](#language)" +msgstr "" + +#: src/settings.md:9 +msgid "[Error reporting mode](#error-reporting-mode)" +msgstr "" + +#: src/settings.md:10 +msgid "[Notifications](#notifications)" +msgstr "" + +#: src/settings.md:11 +msgid "[Notify when](#notify-when)" +msgstr "" + +#: src/settings.md:12 +msgid "[Vibrate](#vibrate)" +msgstr "" + +#: src/settings.md:13 +msgid "[Blink light](#blink-light)" +msgstr "" + +#: src/settings.md:14 +msgid "[Reviewing](#reviewing)" +msgstr "" + +#: src/settings.md:15 +msgid "[New card position](#new-card-position)" +msgstr "" + +#: src/settings.md:16 +msgid "[Start of next day](#start-of-next-day)" +msgstr "" + +#: src/settings.md:17 +msgid "[Learn ahead limit](#learn-ahead-limit)" +msgstr "" + +#: src/settings.md:18 +msgid "[Timebox limit](#timebox-limit)" +msgstr "" + +#: src/settings.md:19 +msgid "[Display](#display)" +msgstr "" + +#: src/settings.md:20 +msgid "[Keep screen on](#keep-screen-on)" +msgstr "" + +#: src/settings.md:21 +msgid "[Fullscreen mode](#fullscreen-mode)" +msgstr "" + +#: src/settings.md:22 +msgid "[Center align](#center-align)" +msgstr "" + +#: src/settings.md:23 +msgid "[Show button time](#show-button-time)" +msgstr "" + +#: src/settings.md:24 +msgid "[Card zoom](#card-zoom)" +msgstr "" + +#: src/settings.md:25 +msgid "[Image zoom](#image-zoom)" +msgstr "" + +#: src/settings.md:26 +msgid "[Answer button size](#answer-button-size)" +msgstr "" + +#: src/settings.md:27 +msgid "[Show remaining](#show-remaining)" +msgstr "" + +#: src/settings.md:28 +msgid "[Whiteboard](#whiteboard)" +msgstr "" + +#: src/settings.md:29 +msgid "[Stroke width](#stroke-width)" +msgstr "" + +#: src/settings.md:30 +msgid "[Black strokes](#black-strokes)" +msgstr "" + +#: src/settings.md:31 +msgid "[Automatic display answer](#automatic-display-answer)" +msgstr "" + +#: src/settings.md:32 +msgid "[Time to show answer](#time-to-show-answer)" +msgstr "" + +#: src/settings.md:33 +msgid "[Time to show next question](#time-to-show-next-question)" +msgstr "" + +#: src/settings.md:34 +msgid "[Fonts](#fonts)" +msgstr "" + +#: src/settings.md:35 +msgid "[Default font](#default-font)" +msgstr "" + +#: src/settings.md:36 +msgid "[Default font applicability](#default-font-applicability)" +msgstr "" + +#: src/settings.md:37 +msgid "[Browser and editor font](#browser-and-editor-font)" +msgstr "" + +#: src/settings.md:38 +msgid "[Card browser font scaling](#card-browser-font-scaling)" +msgstr "" + +#: src/settings.md:40 +msgid "The preferences screen can be accessed by opening the navigation drawer, and choosing **Settings**. It allows you to customize various application settings and how AnkiDroid appears." +msgstr "" + +#: src/settings.md:42 +msgid "The Preferences screen is divided up into different sections, which are covered below." +msgstr "" + +#: src/settings.md:44 +msgid "AnkiDroid" +msgstr "" + +#: src/settings.md:45 +msgid "These are the general settings which affect the whole app:" +msgstr "" + +#: src/settings.md:47 +msgid "AnkiWeb account" +msgstr "" + +#: src/settings.md:48 +msgid "Change the account used for syncing with the cloud. For more information on syncing, please see [this section](anki-desktop.md)." +msgstr "" + +#: src/settings.md:50 +msgid "Fetch media on sync" +msgstr "" + +#: src/settings.md:51 +msgid "By default, AnkiDroid will sync sounds and images as well as your cards and review history. If you disable this option, sounds and images will not be downloaded from or uploaded to the sync server by AnkiDroid." +msgstr "" + +#: src/settings.md:54 +msgid "Automatic synchronization" +msgstr "" + +#: src/settings.md:55 +msgid "Enable this option if you want AnkiDroid to sync every time you open and close the app. There is a limit of once every ten minutes for this behavior. Once a sync begins you can cancel it by pressing your device's back button, however it can take some time for the cancellation to take effect." +msgstr "" + +#: src/settings.md:57 +msgid "Users that want more fine-grained control over when sync occurred might like to use a 3rd party app like Tasker to automate synchronization. See the " +msgstr "" + +#: src/settings.md:57 +msgid "API documentation" +msgstr "" + +#: src/settings.md:57 +msgid " for more information on this." +msgstr "" + +#: src/settings.md:59 +msgid "Deck for new cards" +msgstr "" + +#: src/settings.md:60 +msgid "The default of **Use current deck** means that Anki saves the last-used note type for each deck and selects it again then next time you choose the deck (and, in addition, will start with the current deck selected when choosing Add from anywhere). The other option, **Decide by note type,** saves the last-used deck for each note type (and opens the add window to the last-used note type when you choose Add). This may be more convenient if you always use a single note type for each deck." +msgstr "" + +#: src/settings.md:62 +msgid "Language" +msgstr "" + +#: src/settings.md:63 +msgid "Change the language. Note: AnkiDroid translations are contributed by volunteers. If you find missing or incorrect translations, feel free to contribute to the translation project. More details can be found on the " +msgstr "" + +#: src/settings.md:63 +msgid "AnkiDroid Wiki" +msgstr "" + +#: src/settings.md:63 src/advanced-features/custom-fonts.md:15 +msgid "." +msgstr "" + +#: src/settings.md:65 +msgid "Error reporting mode" +msgstr "" + +#: src/settings.md:66 +msgid "Control whether or not AnkiDroid asks your permission before sending error reports to our error reporting system when AnkiDroid crashes. You can also disable the reporting feature entirely if you wish." +msgstr "" + +#: src/settings.md:68 +msgid "Notifications" +msgstr "" + +#: src/settings.md:69 +msgid "This subsection allows you configure when and how AnkiDroid shows alerts in the Android notification bar." +msgstr "" + +#: src/settings.md:71 +msgid "Notify when" +msgstr "" + +#: src/settings.md:72 +msgid "**Never notify** will disable all notifications from AnkiDroid. **Pending messages available** will only show important status updates like when a sync completed. **More than n cards due** will show a notification when you have more than n cards due (requires the widget to be enabled)." +msgstr "" + +#: src/settings.md:74 +msgid "Vibrate" +msgstr "" + +#: src/settings.md:75 +msgid "Checking this will make your device vibrate when showing a notification" +msgstr "" + +#: src/settings.md:77 +msgid "Blink light" +msgstr "" + +#: src/settings.md:78 +msgid "Checking this will make your device light blink when an unread notification exists (if your device has a notification LED)" +msgstr "" + +#: src/settings.md:81 +msgid "Reviewing" +msgstr "" + +#: src/settings.md:83 +msgid "The reviewing screen allows you to customize how AnkiDroid behaves when you're reviewing cards. Note that only the reviewing settings which are applied to **all decks** are shown here. There are more settings related to reviewing which are **deck specific**. These deck specific settings are located in **Deck options**." +msgstr "" + +#: src/settings.md:86 +msgid "New card position" +msgstr "" + +#: src/settings.md:87 +msgid "Controls when new cards are shown: either mixed with, after, or before all reviews." +msgstr "" + +#: src/settings.md:89 +msgid "Start of next day" +msgstr "" + +#: src/settings.md:90 +msgid "Controls when AnkiDroid should start showing the next day's cards. The default setting of 4AM ensures that if you're studying around midnight, you won't have two days worth of cards shown to you in one session. If you stay up very late or wake up very early, you may want to adjust this to a time you're usually sleeping." +msgstr "" + +#: src/settings.md:93 +msgid "Learn ahead limit" +msgstr "" + +#: src/settings.md:94 +msgid "The Learn ahead limit tells AnkiDroid how to behave when there is nothing left to study in the current deck but cards in learning. The default setting of 20 minutes tells AnkiDroid that cards should be shown early if they are due to be shown in less than 20 minutes and there's nothing else to do. If you set this to 0, Anki will always wait the full period, showing the congratulations screen until the remaining cards are ready to be reviewed." +msgstr "" + +#: src/settings.md:96 +msgid "Timebox limit" +msgstr "" + +#: src/settings.md:97 +msgid "Timeboxing is a technique to help you focus by dividing a longer activity (such as a 30 minute study session) into smaller blocks. If you set the timebox time limit to a non-zero number of minutes, AnkiDroid will periodically show a message saying you how many cards you've managed to study during the prescribed time limit." +msgstr "" + +#: src/settings.md:99 +msgid "Display" +msgstr "" + +#: src/settings.md:100 +msgid "This subsection relates to the way cards are displayed during reviewing" +msgstr "" + +#: src/settings.md:102 +msgid "Keep screen on" +msgstr "" + +#: src/settings.md:103 +msgid "Ignore the automatic screen timeout setting in Android to always keep the screen on." +msgstr "" + +#: src/settings.md:105 +msgid "Fullscreen mode" +msgstr "" + +#: src/settings.md:106 +msgid "Switches to an immersive fullscreen mode so that you can use more of the screen. You can choose between **Hide the system bars** which will hide the system status bar, action bar, and bottom navigation buttons. Alternatively you can choose **Hide the system bars and answer buttons**, which will hide everything except for the actual card content itself. You can temporarily exit fullscreen mode by swiping inwards (i.e. down or up) from the system bars." +msgstr "" + +#: src/settings.md:108 +msgid "_Note that immersive fullscreen mode is only supported on Android 4.4+_" +msgstr "" + +#: src/settings.md:110 +msgid "Center align" +msgstr "" + +#: src/settings.md:111 +msgid "By default AnkiDroid tries to show cards exactly as they are shown on Anki Desktop, however if you prefer your cards to be center aligned vertically in AnkiDroid then you can enable this feature." +msgstr "" + +#: src/settings.md:113 +msgid "Show button time" +msgstr "" + +#: src/settings.md:114 +msgid "By default, the answer buttons will display the time a card will next be shown. If you disable this option, the times will not appear, and only labels like **Again**, **Good** and **Easy** will be shown." +msgstr "" + +#: src/settings.md:116 +msgid "Card zoom" +msgstr "" + +#: src/settings.md:117 +msgid "Here you can increase the zoom level of the card content (excluding images). You can use this option if you want to increase the font size for all cards." +msgstr "" + +#: src/settings.md:119 +msgid "Image zoom" +msgstr "" + +#: src/settings.md:120 +msgid "Here you can increase the zoom level of any images embedded in your cards." +msgstr "" + +#: src/settings.md:122 +msgid "Answer button size" +msgstr "" + +#: src/settings.md:123 +msgid "If you find it difficult to press the answer button, you can use this setting to make it bigger." +msgstr "" + +#: src/settings.md:125 +msgid "Show remaining" +msgstr "" + +#: src/settings.md:126 +msgid "Disabling this allows you to hide the card count in the top left of the screen." +msgstr "" + +#: src/settings.md:128 +msgid "Whiteboard" +msgstr "" + +#: src/settings.md:129 +msgid "This subsection controls the whiteboard in the reviewer. Note: the whiteboard must be enabled in each deck individually from the menu in the study screen." +msgstr "" + +#: src/settings.md:132 +msgid "Stroke width" +msgstr "" + +#: src/settings.md:133 +msgid "Control the stroke width of the whiteboard. Reducing the stroke width may allow you to draw with more detail." +msgstr "" + +#: src/settings.md:135 +msgid "Black strokes" +msgstr "" + +#: src/settings.md:136 +msgid "Use black strokes instead of color, which may reduce memory usage. Note: this setting doesn't apply when night mode is enabled." +msgstr "" + +#: src/settings.md:138 +msgid "Automatic display answer" +msgstr "" + +#: src/settings.md:139 +msgid "The automatic display answer feature allows you to have the answer shown automatically after some timeout period. You can also have the next question shown automatically; in this case the card is assumed to be failed (i.e. the again button is automatically chosen)" +msgstr "" + +#: src/settings.md:141 +msgid "Time to show answer" +msgstr "" + +#: src/settings.md:142 +msgid "Time to wait until answer is automatically shown" +msgstr "" + +#: src/settings.md:144 +msgid "Time to show next question" +msgstr "" + +#: src/settings.md:145 +msgid "Time to wait until next question is automatically shown." +msgstr "" + +#: src/settings.md:147 +msgid "Fonts" +msgstr "" + +#: src/settings.md:148 +msgid "In this screen you can change the font used by AnkiDroid, and some scaling options related to fonts. See the [custom fonts](advanced-features/custom-fonts.md) section for more information about using custom fonts." +msgstr "" + +#: src/settings.md:151 +msgid "Default font" +msgstr "" + +#: src/settings.md:152 +msgid "Choose the default font used by the AnkiDroid reviewer. You can add fonts to this list by copying them to the **fonts** folder." +msgstr "" + +#: src/settings.md:154 +msgid "Default font applicability" +msgstr "" + +#: src/settings.md:155 +msgid "The default setting is to only use the default font when no font has been specified in the card styling via Anki Desktop, however you can also force the default font to be applied, ignoring any font specification in the card styling." +msgstr "" + +#: src/settings.md:157 +msgid "Browser and editor font" +msgstr "" + +#: src/settings.md:158 +msgid "The font to be used by the browser and editor" +msgstr "" + +#: src/settings.md:160 +msgid "Card browser font scaling" +msgstr "" + +#: src/settings.md:161 +msgid "Lets you change the font size used in the card browser." +msgstr "" + +#: src/gestures.md:3 +msgid "[Actions](#actions)" +msgstr "" + +#: src/gestures.md:4 +msgid "[No action](#no-action)" +msgstr "" + +#: src/gestures.md:5 +msgid "[Answer button 1](#answer-button-1)" +msgstr "" + +#: src/gestures.md:6 +msgid "[Answer button 2](#answer-button-2)" +msgstr "" + +#: src/gestures.md:7 +msgid "[Answer button 3](#answer-button-3)" +msgstr "" + +#: src/gestures.md:8 +msgid "[Answer button 4](#answer-button-4)" +msgstr "" + +#: src/gestures.md:9 +msgid "[Answer recommended (green)](#answer-recommended-green)" +msgstr "" + +#: src/gestures.md:10 +msgid "[Answer better than recommended](#answer-better-than-recommended)" +msgstr "" + +#: src/gestures.md:12 +msgid "[Edit card](#edit-card)" +msgstr "" + +#: src/gestures.md:13 +msgid "[Mark](#mark)" +msgstr "" + +#: src/gestures.md:14 +msgid "[Lookup expression](#lookup-expression)" +msgstr "" + +#: src/gestures.md:15 +msgid "[Bury card](#bury-card)" +msgstr "" + +#: src/gestures.md:16 +msgid "[Suspend card](#suspend-card)" +msgstr "" + +#: src/gestures.md:17 +msgid "[Delete note](#delete-note)" +msgstr "" + +#: src/gestures.md:18 +msgid "[Play media](#play-media)" +msgstr "" + +#: src/gestures.md:19 +msgid "[Abort learning](#abort-learning)" +msgstr "" + +#: src/gestures.md:20 +msgid "[Bury note](#bury-note)" +msgstr "" + +#: src/gestures.md:21 +msgid "[Suspend note](#suspend-note)" +msgstr "" + +#: src/gestures.md:22 +msgid "[Toggle Red Flag](#toggle-red-flag)" +msgstr "" + +#: src/gestures.md:23 +msgid "[Toggle Orange Flag](#toggle-orange-flag)" +msgstr "" + +#: src/gestures.md:24 +msgid "[Toggle Green Flag](#toggle-green-flag)" +msgstr "" + +#: src/gestures.md:25 +msgid "[Toggle Blue Flag](#toggle-blue-flag)" +msgstr "" + +#: src/gestures.md:26 +msgid "[Remove Flag](#remove-flag)" +msgstr "" + +#: src/gestures.md:27 +msgid "[Advanced](#advanced)" +msgstr "" + +#: src/gestures.md:28 +msgid "[Collection path](#collection-path)" +msgstr "" + +#: src/gestures.md:29 +msgid "[Force full sync](#force-full-sync)" +msgstr "" + +#: src/gestures.md:30 +msgid "[Advanced Statistics](#advanced-statistics)" +msgstr "" + +#: src/gestures.md:31 +msgid "[Workarounds](#workarounds)" +msgstr "" + +#: src/gestures.md:32 +msgid "[Type answer into the card](#type-answer-into-the-card)" +msgstr "" + +#: src/gestures.md:33 +msgid "[Input Workaround](#input-workaround)" +msgstr "" + +#: src/gestures.md:34 +msgid "[Longclick Workaround](#longclick-workaround)" +msgstr "" + +#: src/gestures.md:35 +msgid "[Fix for Hebrew Vowels](#fix-for-hebrew-vowels)" +msgstr "" + +#: src/gestures.md:36 +msgid "[Text to Speech](#text-to-speech)" +msgstr "" + +#: src/gestures.md:37 +msgid "[Lookup Dictionary](#lookup-dictionary)" +msgstr "" + +#: src/gestures.md:38 +msgid "[Reset Languages](#reset-languages)" +msgstr "" + +#: src/gestures.md:39 +msgid "[eReader (up/down buttons)](#ereader-updown-buttons)" +msgstr "" + +#: src/gestures.md:40 +msgid "[eReader Double Scrolling](#ereader-double-scrolling)" +msgstr "" + +#: src/gestures.md:42 +msgid "AnkiDroid allows you to customize the interface, so that actions you perform frequently can be accomplished quickly by using tap and swipe gestures." +msgstr "" + +#: src/gestures.md:45 +msgid "Actions" +msgstr "" + +#: src/gestures.md:46 +msgid "The following gestures can be used:" +msgstr "" + +#: src/gestures.md:48 +msgid "Swipe up" +msgstr "" + +#: src/gestures.md:49 +msgid "Swipe down" +msgstr "" + +#: src/gestures.md:50 +msgid "Swipe left" +msgstr "" + +#: src/gestures.md:51 +msgid "Swipe right" +msgstr "" + +#: src/gestures.md:52 +msgid "Double touch" +msgstr "" + +#: src/gestures.md:53 +msgid "Touch top" +msgstr "" + +#: src/gestures.md:54 +msgid "Touch bottom" +msgstr "" + +#: src/gestures.md:55 +msgid "Touch left" +msgstr "" + +#: src/gestures.md:56 +msgid "Tough right" +msgstr "" + +#: src/gestures.md:58 +msgid "The following actions are available for each gesture:" +msgstr "" + +#: src/gestures.md:60 +msgid "No action" +msgstr "" + +#: src/gestures.md:61 +msgid "Don't do anything. Useful if you want to disable certain swipes, tap zones and so on." +msgstr "" + +#: src/gestures.md:63 +msgid "Answer button 1" +msgstr "" + +#: src/gestures.md:64 +msgid "When the answer screen is shown, choose the red button, indicating you wish to review the card again soon. This is useful when you forgot a card or wish to review it more frequently. When the question is shown, this action (and all other answer actions below) will simply show the answer." +msgstr "" + +#: src/gestures.md:69 +msgid "Answer button 2" +msgstr "" + +#: src/gestures.md:70 +msgid "When the answer screen is shown, choose the second button from the left, generally indicating you found the card hard to remember." +msgstr "" + +#: src/gestures.md:73 +msgid "Answer button 3" +msgstr "" + +#: src/gestures.md:74 +msgid "When the answer screen is shown, choose the third button from the left." +msgstr "" + +#: src/gestures.md:76 +msgid "Answer button 4" +msgstr "" + +#: src/gestures.md:77 +msgid "When the answer screen is shown, choose the fourth button from the left (when applicable)." +msgstr "" + +#: src/gestures.md:79 +msgid "Answer recommended (green)" +msgstr "" + +#: src/gestures.md:80 +msgid "When the answer screen is shown, choose the green button. This is the button you should end up using the most." +msgstr "" + +#: src/gestures.md:83 +msgid "Answer better than recommended" +msgstr "" + +#: src/gestures.md:84 +msgid "When the answer screen is shown, choose the button on the right, indicating you found the card too easy to remember and would like a much longer delay." +msgstr "" + +#: src/gestures.md:89 +msgid "Undoes the last action." +msgstr "" + +#: src/gestures.md:91 +msgid "Edit card" +msgstr "" + +#: src/gestures.md:92 +msgid "Edits the current card." +msgstr "" + +#: src/gestures.md:94 +msgid "Mark" +msgstr "" + +#: src/gestures.md:95 +msgid "Adds a tag called **Marked** the current note, so it can be easily found in a search." +msgstr "" + +#: src/gestures.md:97 +msgid "Lookup expression" +msgstr "" + +#: src/gestures.md:98 +msgid "When the lookup feature is enabled (in advanced settings), lookup an expression in the selected dictionary. Note: the expression needs to be copied to the clipboard before this action will work." +msgstr "" + +#: src/gestures.md:101 +msgid "Bury card" +msgstr "" + +#: src/gestures.md:102 +msgid "Hides the current card from review." +msgstr "" + +#: src/gestures.md:104 +msgid "Suspend card" +msgstr "" + +#: src/gestures.md:105 +msgid "Prevent current card from being shown during review until you unsuspend it via the card browser." +msgstr "" + +#: src/gestures.md:108 +msgid "Deletes the currently shown note and all of its cards." +msgstr "" + +#: src/gestures.md:110 +msgid "Play media" +msgstr "" + +#: src/gestures.md:111 +msgid "Replay any audio on the card." +msgstr "" + +#: src/gestures.md:113 +msgid "Abort learning" +msgstr "" + +#: src/gestures.md:114 +msgid "Stop reviewing and go back to the deck overview page." +msgstr "" + +#: src/gestures.md:116 +msgid "Bury note" +msgstr "" + +#: src/gestures.md:117 +msgid "Bury the current note (i.e. hide it until the next day)." +msgstr "" + +#: src/gestures.md:119 +msgid "Suspend note" +msgstr "" + +#: src/gestures.md:120 +msgid "Suspend the current note (i.e. hide it until you unsuspend it)." +msgstr "" + +#: src/gestures.md:122 +msgid "Toggle Red Flag" +msgstr "" + +#: src/gestures.md:123 +msgid "Enables the red flag, unless the flag is already red, in which case the flag is disabled." +msgstr "" + +#: src/gestures.md:125 +msgid "Toggle Orange Flag" +msgstr "" + +#: src/gestures.md:126 +msgid "Enables the orange flag, unless the flag is already orange, in which case the flag is disabled." +msgstr "" + +#: src/gestures.md:128 +msgid "Toggle Green Flag" +msgstr "" + +#: src/gestures.md:129 +msgid "Enables the green flag, unless the flag is already green, in which case the flag is disabled." +msgstr "" + +#: src/gestures.md:131 +msgid "Toggle Blue Flag" +msgstr "" + +#: src/gestures.md:132 +msgid "Enables the blue flag, unless the flag is already blue, in which case the flag is disabled." +msgstr "" + +#: src/gestures.md:134 +msgid "Remove Flag" +msgstr "" + +#: src/gestures.md:135 +msgid "Removes the flag from the card." +msgstr "" + +#: src/gestures.md:137 +msgid "Advanced" +msgstr "" + +#: src/gestures.md:138 +msgid "Some less common features for advanced users are shown here" +msgstr "" + +#: src/gestures.md:140 +msgid "Collection path" +msgstr "" + +#: src/gestures.md:141 +msgid "Change the location where AnkiDroid's data is stored (not recommended)" +msgstr "" + +#: src/gestures.md:143 +msgid "Force full sync" +msgstr "" + +#: src/gestures.md:144 +msgid "Tap this item to force a full upload or download on the next sync (for example, because you accidentally deleted a deck on one side and want to restore the deck rather than having its deletion synchronized)." +msgstr "" + +#: src/gestures.md:147 +msgid "Take into account the effect of future reviews in the **Forecast** graph. More info [here](advanced-features/advanced-statistics.md)." +msgstr "" + +#: src/gestures.md:149 +msgid "Workarounds" +msgstr "" + +#: src/gestures.md:151 +msgid "Type answer into the card" +msgstr "" + +#: src/gestures.md:153 +msgid "If you have set up your cards to ask you to type in the answer (as explained in [this section of the desktop manual](https://docs.ankiweb.net/templates/intro.html)), AnkiDroid will display a keyboard on such cards and allow you to check your answer." +msgstr "" + +#: src/gestures.md:155 +msgid "In order to improve user experience when working with the whiteboard and gestures, we use a typing box separate from the card, which is inconsistent with the way the feature works on Anki Desktop." +msgstr "" + +#: src/gestures.md:157 +msgid "For full consistency with Anki Desktop, you can enable this option which allows you to save screen area, and choose an appropriate font (e.g. Japanese vs Chinese) for the input box." +msgstr "" + +#: src/gestures.md:159 +msgid "Input Workaround" +msgstr "" + +#: src/gestures.md:160 +msgid "Some older devices couldn't gain focus into the text input box for typed-answer fields, so this was added (Hidden for API > 14)." +msgstr "" + +#: src/gestures.md:162 +msgid "Longclick Workaround" +msgstr "" + +#: src/gestures.md:163 +msgid "Some older devices couldn't detect longclick for initiating selecting/copying of text, so this was added (Hidden for API > 10)." +msgstr "" + +#: src/gestures.md:165 +msgid "Fix for Hebrew Vowels" +msgstr "" + +#: src/gestures.md:166 +msgid "Some older devices couldn't render Hebrew text, so this feature was added which allows the user to download and install a Hebrew font which is known to work (Hidden for API > 15)." +msgstr "" + +#: src/gestures.md:168 +msgid "Text to Speech" +msgstr "" + +#: src/gestures.md:169 +msgid "Enable this option to have Android read out all the text on your flashcards using the default text to speech engine. Google's built-in TTS engine should work; 3rd party TTS engines may or may not. AnkiDroid will ask you to select the language for the front and back of your cards once for each deck on the first time you review a card in that deck. To change the language or disable TTS for a given deck after making your initial choice, you'll need to use the **reset languages** option described below and reconfigure for each deck." +msgstr "" + +#: src/gestures.md:173 +msgid "Alternatively, if you want only fragments of cards to be read aloud, or if you want to set the TTS language for multiple decks at once, you can insert `` tags into [card templates](advanced-features/customizing-card-layout.md). For example, with the following template for the back of the card" +msgstr "" + +#: src/gestures.md:178 +msgid "answer" +msgstr "" + +#: src/gestures.md:180 src/gestures.md:194 +msgid "\"android\"" +msgstr "" + +#: src/gestures.md:180 src/gestures.md:194 +msgid "\"en_GB\"" +msgstr "" + +#: src/gestures.md:185 +msgid "only the `EnglishTranslation` field will be read aloud in a British English voice; the `Example` field, lying outside the `` tag, won't be read aloud. Every `` tag needs to have the following two attributes:" +msgstr "" + +#: src/gestures.md:187 +msgid "**`service`**: should be set to **`android`**, otherwise the contents of the **``** tag won't be read aloud;" +msgstr "" + +#: src/gestures.md:188 +msgid "**`voice`**: used to select the TTS language; should be a [two- or three- letter language code](https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes), optionally followed by an underscore and a [two-letter country or region code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2). A frequently updated list of languages supported by the Google TTS engine can be found on its [Wikipedia page](https://en.wikipedia.org/wiki/Google_Text-to-Speech)." +msgstr "" + +#: src/gestures.md:190 +msgid "To make both AnkiDroid and the [AwesomeTTS](https://ankiatts.appspot.com) plugin to the desktop application use a TTS engine to read aloud certain card fragments, put the `` tag inside the `` tag recognised by AwesomeTTS, or vice versa. An example:" +msgstr "" + +#: src/gestures.md:193 +msgid "\"sapi5js\"" +msgstr "" + +#: src/gestures.md:193 +msgid "\"39\"" +msgstr "" + +#: src/gestures.md:193 src/gestures.md:193 +msgid "\"0\"" +msgstr "" + +#: src/gestures.md:193 +msgid "\"Microsoft David Desktop\"" +msgstr "" + +#: src/gestures.md:193 +msgid "\"100\"" +msgstr "" + +#: src/gestures.md:200 +msgid "AnkiDroid automatically ignores `` tags selecting an unknown TTS service. In contrast, AwesomeTTS may display a warning message on encountering the `` tag; to suppress it, uncheck the two _Show errors_ checkboxes on the _Playback_ tab of the _AwesomeTTS: Configuration_ dialog in the desktop application." +msgstr "" + +#: src/gestures.md:202 +msgid "_This feature may be removed in the future in favor of a separately downloadable plugin._" +msgstr "" + +#: src/gestures.md:204 +msgid "Lookup Dictionary" +msgstr "" + +#: src/gestures.md:205 +msgid "Dictionary to use to lookup words copied to the clipboard in the reviewer. After setting up a dictionary, do the following to perform the lookup:" +msgstr "" + +#: src/gestures.md:207 +msgid "Longclick on the text you want to copy in the reviewer" +msgstr "" + +#: src/gestures.md:208 +msgid "After selecting the word you want to copy, press the **copy** icon in the app bar at the top of the screen" +msgstr "" + +#: src/gestures.md:209 +msgid "Tap once anywhere on the flashcard" +msgstr "" + +#: src/gestures.md:210 +msgid "A magnifying glass icon should appear, which performs the lookup when clicked" +msgstr "" + +#: src/gestures.md:212 +msgid "Alternatively, the lookup action can be performed via a gesture." +msgstr "" + +#: src/gestures.md:214 src/gestures.md:222 +msgid "_This feature will likely be removed in the future in favor of a plugin_" +msgstr "" + +#: src/gestures.md:216 +msgid "Reset Languages" +msgstr "" + +#: src/gestures.md:217 +msgid "Useful for resetting the TTS language" +msgstr "" + +#: src/gestures.md:219 +msgid "eReader (up/down buttons)" +msgstr "" + +#: src/gestures.md:220 +msgid "Support for eReader hardware buttons (see [issue 1625](https://github.com/ankidroid/Anki-Android/issues/1625))" +msgstr "" + +#: src/gestures.md:224 +msgid "eReader Double Scrolling" +msgstr "" + +#: src/gestures.md:225 +msgid "Double the scrolling distance when using the eReader hardware buttons" +msgstr "" + +#: src/note-formatting-toolbar.md:3 +msgid "The note formatting toolbar contains basic text formatting buttons (Bold, Italic, Underline, Horizontal Line, Insert Title, Change Font Size, [Insert MathJax](advanced-features/mathjax.md) and Insert Cloze Deletion)." +msgstr "" + +#: src/note-formatting-toolbar.md:5 +msgid "It also allows the addition of user-defined toolbar buttons using HTML. HTML is a powerful language allowing nearly endless customization of your cards. [Our wiki](https://github.com/ankidroid/Anki-Android/wiki/Note-Editor-Toolbar-HTML-Samples) contains common code samples to get you started." +msgstr "" + +#: src/note-formatting-toolbar.md:7 +msgid "A user-defined toolbar button can be removed by long pressing the button and selecting **Delete**." +msgstr "" + +#: src/keyboard-shortcuts.md:3 +msgid "Home Screen" +msgstr "" + +#: src/keyboard-shortcuts.md:5 src/keyboard-shortcuts.md:13 +#: src/keyboard-shortcuts.md:32 src/keyboard-shortcuts.md:53 +#: src/keyboard-shortcuts.md:64 +msgid "Shortcut" +msgstr "" + +#: src/keyboard-shortcuts.md:5 src/keyboard-shortcuts.md:13 +#: src/keyboard-shortcuts.md:32 src/keyboard-shortcuts.md:53 +#: src/keyboard-shortcuts.md:64 +msgid "Purpose" +msgstr "" + +#: src/keyboard-shortcuts.md:7 src/keyboard-shortcuts.md:55 +msgid "A" +msgstr "" + +#: src/keyboard-shortcuts.md:7 +msgid "Add Note" +msgstr "" + +#: src/keyboard-shortcuts.md:8 src/keyboard-shortcuts.md:40 +msgid "B" +msgstr "" + +#: src/keyboard-shortcuts.md:9 +msgid "Y" +msgstr "" + +#: src/keyboard-shortcuts.md:9 +msgid "Sync" +msgstr "" + +#: src/keyboard-shortcuts.md:11 +msgid "Reviewer" +msgstr "" + +#: src/keyboard-shortcuts.md:15 src/keyboard-shortcuts.md:49 +msgid "1" +msgstr "" + +#: src/keyboard-shortcuts.md:15 src/keyboard-shortcuts.md:15 +#: src/keyboard-shortcuts.md:15 src/keyboard-shortcuts.md:20 +#: src/keyboard-shortcuts.md:27 +msgid "," +msgstr "" + +#: src/keyboard-shortcuts.md:15 +msgid "2" +msgstr "" + +#: src/keyboard-shortcuts.md:15 +msgid "3" +msgstr "" + +#: src/keyboard-shortcuts.md:15 +msgid "4" +msgstr "" + +#: src/keyboard-shortcuts.md:15 +msgid "Press the nth answer button" +msgstr "" + +#: src/keyboard-shortcuts.md:16 +msgid "Gamepad Y" +msgstr "" + +#: src/keyboard-shortcuts.md:16 +msgid "Flip Card/Press the first answer button" +msgstr "" + +#: src/keyboard-shortcuts.md:17 +msgid "Gamepad X" +msgstr "" + +#: src/keyboard-shortcuts.md:17 +msgid "Flip Card/Press the second answer button" +msgstr "" + +#: src/keyboard-shortcuts.md:18 +msgid "Gamepad B" +msgstr "" + +#: src/keyboard-shortcuts.md:18 +msgid "Flip Card/Press the third answer button" +msgstr "" + +#: src/keyboard-shortcuts.md:19 +msgid "Gamepad A" +msgstr "" + +#: src/keyboard-shortcuts.md:19 +msgid "Flip Card/Press the fourth answer button" +msgstr "" + +#: src/keyboard-shortcuts.md:20 +msgid "Space" +msgstr "" + +#: src/keyboard-shortcuts.md:20 src/keyboard-shortcuts.md:34 +msgid "Enter" +msgstr "" + +#: src/keyboard-shortcuts.md:20 +msgid "Flip Card/Answer Good" +msgstr "" + +#: src/keyboard-shortcuts.md:21 +msgid "e" +msgstr "" + +#: src/keyboard-shortcuts.md:21 src/keyboard-shortcuts.md:56 +msgid "Edit Note" +msgstr "" + +#: src/keyboard-shortcuts.md:22 +msgid "\\*" +msgstr "" + +#: src/keyboard-shortcuts.md:22 src/keyboard-shortcuts.md:58 +msgid "Mark Note" +msgstr "" + +#: src/keyboard-shortcuts.md:23 +msgid "\\-" +msgstr "" + +#: src/keyboard-shortcuts.md:23 +msgid "Bury Card" +msgstr "" + +#: src/keyboard-shortcuts.md:24 +msgid "=" +msgstr "" + +#: src/keyboard-shortcuts.md:24 +msgid "Bury Note" +msgstr "" + +#: src/keyboard-shortcuts.md:25 +msgid "@" +msgstr "" + +#: src/keyboard-shortcuts.md:25 +msgid "Suspend Card" +msgstr "" + +#: src/keyboard-shortcuts.md:26 +msgid "!" +msgstr "" + +#: src/keyboard-shortcuts.md:26 +msgid "Suspend Note" +msgstr "" + +#: src/keyboard-shortcuts.md:27 +msgid "r" +msgstr "" + +#: src/keyboard-shortcuts.md:27 +msgid "F5" +msgstr "" + +#: src/keyboard-shortcuts.md:27 +msgid "Replay Media" +msgstr "" + +#: src/keyboard-shortcuts.md:28 +msgid "z" +msgstr "" + +#: src/keyboard-shortcuts.md:30 +msgid "Note Editor" +msgstr "" + +#: src/keyboard-shortcuts.md:34 src/keyboard-shortcuts.md:39 +#: src/keyboard-shortcuts.md:40 src/keyboard-shortcuts.md:41 +#: src/keyboard-shortcuts.md:42 src/keyboard-shortcuts.md:43 +#: src/keyboard-shortcuts.md:44 src/keyboard-shortcuts.md:45 +#: src/keyboard-shortcuts.md:46 src/keyboard-shortcuts.md:47 +#: src/keyboard-shortcuts.md:48 src/keyboard-shortcuts.md:49 +#: src/keyboard-shortcuts.md:55 src/keyboard-shortcuts.md:56 +#: src/keyboard-shortcuts.md:57 src/keyboard-shortcuts.md:58 +#: src/keyboard-shortcuts.md:59 src/keyboard-shortcuts.md:66 +msgid "Ctrl" +msgstr "" + +#: src/keyboard-shortcuts.md:34 src/keyboard-shortcuts.md:39 +#: src/keyboard-shortcuts.md:40 src/keyboard-shortcuts.md:41 +#: src/keyboard-shortcuts.md:42 src/keyboard-shortcuts.md:43 +#: src/keyboard-shortcuts.md:44 src/keyboard-shortcuts.md:45 +#: src/keyboard-shortcuts.md:46 src/keyboard-shortcuts.md:47 +#: src/keyboard-shortcuts.md:47 src/keyboard-shortcuts.md:48 +#: src/keyboard-shortcuts.md:48 src/keyboard-shortcuts.md:48 +#: src/keyboard-shortcuts.md:49 src/keyboard-shortcuts.md:55 +#: src/keyboard-shortcuts.md:56 src/keyboard-shortcuts.md:57 +#: src/keyboard-shortcuts.md:58 src/keyboard-shortcuts.md:59 +#: src/keyboard-shortcuts.md:59 src/keyboard-shortcuts.md:66 +msgid "+" +msgstr "" + +#: src/keyboard-shortcuts.md:34 +msgid "Save Note" +msgstr "" + +#: src/keyboard-shortcuts.md:35 src/keyboard-shortcuts.md:57 +msgid "D" +msgstr "" + +#: src/keyboard-shortcuts.md:35 +msgid "Select Deck" +msgstr "" + +#: src/keyboard-shortcuts.md:36 +msgid "L" +msgstr "" + +#: src/keyboard-shortcuts.md:36 src/keyboard-shortcuts.md:62 +msgid "Card Template Editor" +msgstr "" + +#: src/keyboard-shortcuts.md:37 +msgid "N" +msgstr "" + +#: src/keyboard-shortcuts.md:37 +msgid "Select Note Type" +msgstr "" + +#: src/keyboard-shortcuts.md:38 +msgid "T" +msgstr "" + +#: src/keyboard-shortcuts.md:38 +msgid "Edit Tags" +msgstr "" + +#: src/keyboard-shortcuts.md:39 src/keyboard-shortcuts.md:66 +msgid "P" +msgstr "" + +#: src/keyboard-shortcuts.md:39 +msgid "Preview Note" +msgstr "" + +#: src/keyboard-shortcuts.md:40 +msgid "Bold" +msgstr "" + +#: src/keyboard-shortcuts.md:41 +msgid "I" +msgstr "" + +#: src/keyboard-shortcuts.md:41 +msgid "Italic" +msgstr "" + +#: src/keyboard-shortcuts.md:42 +msgid "U" +msgstr "" + +#: src/keyboard-shortcuts.md:42 +msgid "Underline" +msgstr "" + +#: src/keyboard-shortcuts.md:43 src/keyboard-shortcuts.md:59 +msgid "R" +msgstr "" + +#: src/keyboard-shortcuts.md:43 +msgid "Insert Horizontal Rule" +msgstr "" + +#: src/keyboard-shortcuts.md:44 +msgid "H" +msgstr "" + +#: src/keyboard-shortcuts.md:44 +msgid "Insert Title" +msgstr "" + +#: src/keyboard-shortcuts.md:45 +msgid "F" +msgstr "" + +#: src/keyboard-shortcuts.md:45 +msgid "Change Font Size" +msgstr "" + +#: src/keyboard-shortcuts.md:46 +msgid "M" +msgstr "" + +#: src/keyboard-shortcuts.md:46 +msgid "Insert MathJax Equation" +msgstr "" + +#: src/keyboard-shortcuts.md:47 src/keyboard-shortcuts.md:48 +msgid "Shift" +msgstr "" + +#: src/keyboard-shortcuts.md:47 src/keyboard-shortcuts.md:48 +msgid "C" +msgstr "" + +#: src/keyboard-shortcuts.md:47 +msgid "Insert New Cloze Deletion" +msgstr "" + +#: src/keyboard-shortcuts.md:48 src/keyboard-shortcuts.md:59 +msgid "Alt" +msgstr "" + +#: src/keyboard-shortcuts.md:48 +msgid "Insert Cloze Deletion using existing number" +msgstr "" + +#: src/keyboard-shortcuts.md:49 +msgid ".." +msgstr "" + +#: src/keyboard-shortcuts.md:49 +msgid "0" +msgstr "" + +#: src/keyboard-shortcuts.md:49 +msgid "Insert User-Defined HTML" +msgstr "" + +#: src/keyboard-shortcuts.md:55 +msgid "Select All" +msgstr "" + +#: src/keyboard-shortcuts.md:56 +msgid "E" +msgstr "" + +#: src/keyboard-shortcuts.md:57 +msgid "Change Deck" +msgstr "" + +#: src/keyboard-shortcuts.md:58 +msgid "K" +msgstr "" + +#: src/keyboard-shortcuts.md:66 +msgid "Preview Changed" +msgstr "" + +#: src/rtl.md:3 +msgid "Anki and AnkiDroid have full support for RTL languages such as Arabic, Hebrew, and Persian." +msgstr "" + +#: src/rtl.md:5 +msgid "Editing Fields as RTL" +msgstr "" + +#: src/rtl.md:6 +msgid "Fields can be marked as RTL (currently possible only from Anki Desktop) for RTL editing. When a field is marked as RTL, then the text is right-aligned in editing fields and punctuation is correctly displayed at the end (left) of sentences. Text that contains blocks of LTR characters will be properly displayed as well, with the beginning of the sentence appearing to the right of the LTR block and the end of the sentence being displayed to the left of the LTR block." +msgstr "" + +#: src/rtl.md:8 +msgid "Directionality is especially important for editing and creating RTL cloze deletions as the cloze format includes both neutral and LTR markup characters. Therefore it is recommended to use a separate note type for LTR cloze deletions and RTL cloze deletions." +msgstr "" + +#: src/rtl.md:10 +msgid "Displaying Fields as RTL during study" +msgstr "" + +#: src/rtl.md:11 +msgid "To display a field as RTL, with proper right-alignment and directionality (punctuation at left of sentences, proper flow around LTR blocks), the field should be wrapped in a div or span element with the RTL directionality specified:" +msgstr "" + +#: src/rtl.md:14 +msgid "\"rtl\"" +msgstr "" + +#: src/anki-desktop.md:3 +msgid "[Via Cloud Sync](#via-cloud-sync)" +msgstr "" + +#: src/anki-desktop.md:4 +msgid "[Sync existing decks into a new AnkiDroid install](#sync-existing-decks-into-a-new-ankidroid-install)" +msgstr "" + +#: src/anki-desktop.md:5 +msgid "[Sync from AnkiDroid to Computer](#sync-from-ankidroid-to-computer)" +msgstr "" + +#: src/anki-desktop.md:7 +msgid "Anki has a free cloud synchronization service called AnkiWeb that makes it easy to keep your card decks in sync between mobile devices and your computer. If you cannot use sync for some reason, it's also possible to use USB, though this method is more laborious." +msgstr "" + +#: src/anki-desktop.md:9 +msgid "Note that AnkiDroid is not affiliated with Anki Desktop or AnkiWeb. AnkiDroid is based on Anki Desktop but it is developed by an entirely separate community of volunteers." +msgstr "" + +#: src/anki-desktop.md:11 +msgid "![AnkiDesktop.png](img/AnkiDesktop.png)" +msgstr "" + +#: src/anki-desktop.md:13 +msgid "Via Cloud Sync" +msgstr "" + +#: src/anki-desktop.md:14 +msgid "Before you can use AnkiWeb, you'll first need to create an account by visiting [https://ankiweb.net](https://ankiweb.net) and clicking the **Sign Up** button. If you have used AnkiWeb in the past, you can skip this step. After signing up, see the corresponding instructions below, depending on whether you are trying to get your existing decks into AnkiDroid or out of AnkiDroid." +msgstr "" + +#: src/anki-desktop.md:16 +msgid "Sync existing decks into a new AnkiDroid install" +msgstr "" + +#: src/anki-desktop.md:17 +msgid "In this scenario you have some existing Anki decks that you want to copy into a new install of AnkiDroid by syncing with AnkiWeb. Open the Anki client with your existing decks (usually this would be Anki desktop, but it could also mean a version of AnkiDroid you have been using on another device), and click the synchronization button (which has two arrows in a circle) at the top right of the deck list." +msgstr "" + +#: src/anki-desktop.md:19 +msgid "If you have never used AnkiWeb before you will need to enter your credentials if prompted, and then press the **Upload to AnkiWeb** button to confirm overwriting the empty collection on AnkiWeb with your existing decks in Anki. Anki will upload all your cards, images and audio to AnkiWeb. If you have a lot of media, this may take some time." +msgstr "" + +#: src/anki-desktop.md:21 +msgid "Once the synchronization has completed, open AnkiDroid in the device that you are trying to copy the existing decks into, and tap the **Sync** button in the app bar at the top of the main [deck list](deck-picker.md). After entering your AnkiWeb credentials, AnkiDroid will download all your cards and media, and remember your login information for next time." +msgstr "" + +#: src/anki-desktop.md:24 +msgid "Note that if you have any existing material in AnkiDroid before attempting to sync, you may be shown a message asking you to choose to either download from AnkiWeb, or upload to AnkiWeb. If you are happy to lose the cards in AnkiDroid then simply choose **Download**. If you need to merge the existing cards with AnkiDroid then you should see the [resolving conflicts](ankiweb-conflicts.md#dealing-with-merge-conflicts-on-ankiweb) section before continuing." +msgstr "" + +#: src/anki-desktop.md:26 +msgid "After the first synchronization has completed, you can click the sync button again any time you wish to synchronize your changes to the cloud. Only changes made since the previous sync will be sent, so subsequent syncs are a lot faster." +msgstr "" + +#: src/anki-desktop.md:28 +msgid "If you add some new cards on the desktop computer and want to sync them to AnkiDroid, you'd repeat the same basic process: sync on desktop (or close the program, as it syncs automatically on close by default), and then tap the sync button on AnkiDroid." +msgstr "" + +#: src/anki-desktop.md:30 +msgid "Sync from AnkiDroid to Computer" +msgstr "" + +#: src/anki-desktop.md:31 +msgid "The process of syncing from AnkiDroid to computer is essentially the same as syncing from computer to AnkiDroid, but in reverse." +msgstr "" + +#: src/anki-desktop.md:33 +msgid "From the [deck list](deck-picker.md), tap the sync button in the top right (it has two arrows in a circle). If it's your first time using AnkiWeb, you may need to enter your login credentials, and then press the \"upload\" button to upload your AnkiDroid collection to AnkiWeb." +msgstr "" + +#: src/anki-desktop.md:35 +msgid "Once the synchronization has completed, open Anki Desktop on your computer and press the sync button there (with two arrows in a circle), and Anki will download your collection." +msgstr "" + +#: src/ankiweb-conflicts.md:2 +msgid "Although it should not happen often, occasionally you may end up in the position where your cards on AnkiDroid can not be automatically merged with the cards on AnkiWeb. In this case it's necessary to choose to either upload to or download from AnkiWeb, which would overwrite any changes on the other side. " +msgstr "" + +#: src/ankiweb-conflicts.md:4 +msgid "If you have new cards on both sides which you want to keep, before syncing you can [export a deck package](exporting.md) for each deck containing new cards from AnkiDroid, then when you do the sync choose **download** to download from AnkiWeb. After the synchronization has completed, you can import the decks you previously exported from AnkiDroid, as per the [importing section](importing/importing-anki-files.md)." +msgstr "" + +#: src/ankiweb-conflicts.md:6 +msgid "Via USB" +msgstr "" + +#: src/ankiweb-conflicts.md:8 +msgid "If you don't have regular internet access, it's still possible to copy decks back and forth to your device, by using USB." +msgstr "" + +#: src/ankiweb-conflicts.md:10 +msgid "The USB method works by importing or exporting all your decks at once. This means that unlike syncing via AnkiWeb, you can't make changes from two locations at once and then merge them. Instead, if you wish to add cards on the desktop, you need to make sure you export the latest version of your collection from your mobile device first, or you'll end up losing any reviews done on the mobile device." +msgstr "" + +#: src/ankiweb-conflicts.md:12 +msgid "Thus the workflow you would typically use is to export your collection from your mobile device and import it into the desktop, make modifications on the desktop, and then export your collection and import it back into your mobile device." +msgstr "" + +#: src/ankiweb-conflicts.md:14 +msgid "AnkiDroid can't directly import text files. If you wish to do that, you'll need to do that with the desktop program, and then import your collection into AnkiDroid." +msgstr "" + +#: src/ankiweb-conflicts.md:16 +msgid "Copy all decks from Anki Desktop to AnkiDroid via USB" +msgstr "" + +#: src/ankiweb-conflicts.md:18 +msgid "On your computer:" +msgstr "" + +#: src/ankiweb-conflicts.md:19 +msgid "Open the desktop program." +msgstr "" + +#: src/ankiweb-conflicts.md:20 +msgid "Choose File>Export from the menu." +msgstr "" + +#: src/ankiweb-conflicts.md:21 +msgid "Click the **Export...** button. Make sure to leave **all decks** selected, as it's not possible to import individual decks into AnkiDroid. **Include scheduling information** must also remain checked." +msgstr "" + +#: src/ankiweb-conflicts.md:22 +msgid "Anki will automatically create a collection.apkg on your desktop. If the file is named something else, please see the previous step again." +msgstr "" + +#: src/ankiweb-conflicts.md:23 +msgid "Connect your Android device to your computer via the USB cable." +msgstr "" + +#: src/ankiweb-conflicts.md:24 +msgid "Open the file explorer on your computer and view the contents of your Android device." +msgstr "" + +#: src/ankiweb-conflicts.md:25 +msgid "Locate the AnkiDroid folder." +msgstr "" + +#: src/ankiweb-conflicts.md:26 +msgid "Drag the collection.apkg file from your desktop into this AnkiDroid folder." +msgstr "" + +#: src/ankiweb-conflicts.md:28 +msgid "Then in AnkiDroid:" +msgstr "" + +#: src/ankiweb-conflicts.md:29 +msgid "From the main decks screen, tap **Import file** from the menu" +msgstr "" + +#: src/ankiweb-conflicts.md:30 +msgid "Tap on **Collection** and then confirm" +msgstr "" + +#: src/ankiweb-conflicts.md:32 +msgid "Once complete, the decks on your device will have been replaced with the decks from your desktop. See the section on [importing apkg files](importing/importing-anki-files.md) for more help with importing." +msgstr "" + +#: src/ankiweb-conflicts.md:35 +msgid "Copy all decks from AnkiDroid to Anki Desktop via USB" +msgstr "" + +#: src/ankiweb-conflicts.md:37 +msgid "The process to copy your decks from AnkiDroid to Anki Desktop is essentially the same as above, but in reverse." +msgstr "" + +#: src/ankiweb-conflicts.md:38 +msgid "Start with your device disconnected from USB" +msgstr "" + +#: src/ankiweb-conflicts.md:39 +msgid "Choose **Export collection** from the main menu in the Deck Screen" +msgstr "" + +#: src/ankiweb-conflicts.md:40 +msgid "Ensure **Include scheduling information** remains checked and press **OK**" +msgstr "" + +#: src/ankiweb-conflicts.md:41 +msgid "Connect device to computer using USB" +msgstr "" + +#: src/ankiweb-conflicts.md:42 +msgid "Copy the **collection.apkg** from the path specified in the message to the desktop on your computer" +msgstr "" + +#: src/ankiweb-conflicts.md:43 +msgid "Double click on the file to import into Anki Desktop" +msgstr "" + +#: src/ankiweb-conflicts.md:45 +msgid "See the [exporting section](exporting.md) below for more detailed information on exporting from AnkiDroid." +msgstr "" + +#: src/advanced-features/intro.md:3 +msgid "[MathJax Support](mathjax.md)" +msgstr "" + +#: src/advanced-features/intro.md:4 +msgid "[Reverse Cards](reverse-cards.md)" +msgstr "" + +#: src/advanced-features/intro.md:5 +msgid "[Custom Fonts](custom-fonts.md)" +msgstr "" + +#: src/advanced-features/intro.md:6 +msgid "[Custom Card Layout](customizing-card-layout.md)" +msgstr "" + +#: src/advanced-features/intro.md:7 +msgid "[Type in the answer feature](type-in-answer.md)" +msgstr "" + +#: src/advanced-features/intro.md:8 +msgid "[Advanced Statistics](advanced-statistics.md)" +msgstr "" + +#: src/advanced-features/intro.md:9 +msgid "[Reminders](reminders.md)" +msgstr "" + +#: src/advanced-features/intro.md:10 +msgid "[Automatic Language Selection](set-language-hint.md)" +msgstr "" + +#: src/advanced-features/mathjax.md:2 +msgid "Mathjax is a modern typesetting library for math and chemistry. AnkiDroid supports Mathjax cards out of the box. Mathjax is configured to expect TeX formatting, with `\\(` and `\\)` delimiting inline equations and `\\[` and `\\]` for display equations." +msgstr "" + +#: src/advanced-features/mathjax.md:4 +msgid "To try it out, enter the following into a field:" +msgstr "" + +#: src/advanced-features/mathjax.md:10 +msgid "and preview the card." +msgstr "" + +#: src/advanced-features/mathjax.md:12 +msgid "For more details, see [Mathjax Support](https://docs.ankiweb.net/math.html#mathjax) in the Anki Manual." +msgstr "" + +#: src/advanced-features/mathjax.md:14 +msgid "[Previous workarounds](https://www.reddit.com/r/Anki/comments/ar7lxd/how_to_load_mathjax_color_extension_on_anki/egm6u5j) are no longer necessary as of AnkiDroid 2.9." +msgstr "" + +#: src/advanced-features/reverse-cards.md:3 +msgid "The Anki system has [built-in note types which allow you to review cards in both directions](https://docs.ankiweb.net/getting-started.html#note-types). When [creating new material](../adding-notes.md) in AnkiDroid, you should choose one of these note types, such as **Basic (and reversed card)**, which will automatically generate a reverse card for you." +msgstr "" + +#: src/advanced-features/reverse-cards.md:6 +msgid "![ReverseNoteType](../img/ReverseNoteType.png)" +msgstr "" + +#: src/advanced-features/reverse-cards.md:8 +msgid "If you used the wrong note type when adding your material, you can change the note type via the [edit note screen](../editing-notes.md), or you can change the note type for multiple cards at once using the browser in Anki Desktop. To do this, follow the instructions in the [syncing with Anki Desktop section](../anki-desktop.md), then in Anki Desktop open the browser, select the cards you want to change, then choose **Change note type** from the menu." +msgstr "" + +#: src/advanced-features/reverse-cards.md:11 +msgid "Alternatively, if your cards are using a custom card layout which doesn't include a reverse card, you can edit the note type to include a reverse card by following the instructions in the [reverse cards section](https://docs.ankiweb.net/templates/generation.html#reverse-cards) of the Anki Desktop user manual. While less convenient than using Anki Desktop, it is possible to edit the note type from directly within AnkiDroid as well; see the [custom card layout section](../advanced-features/customizing-card-layout.md) for more on this." +msgstr "" + +#: src/advanced-features/custom-fonts.md:3 +msgid "AnkiDroid allows you to use non-system fonts on your cards. To set them up properly, it is strongly recommended to use the official method that is used by Anki Desktop. Please see [the corresponding section in the desktop manual](https://docs.ankiweb.net/templates/styling.html#installing-fonts) for more information." +msgstr "" + +#: src/advanced-features/custom-fonts.md:5 +msgid "Alternatively, you can create a new subfolder **fonts** in the main AnkiDroid directory (i.e. the folder which contains the **backups** subfolder, specified under `Settings > Advanced > AnkiDroid directory)`, copy a compatible font file (i.e. .ttf) there, and then set this as the default font under `Settings > Fonts > Default font`. " +msgstr "" + +#: src/advanced-features/custom-fonts.md:7 +msgid "**Note:** this method will change the default font for **all** of your cards, whereas the official method can be more specific. Also, if you sync with AnkiWeb, using this method will lead to cards being displayed differently on different devices." +msgstr "" + +#: src/advanced-features/custom-fonts.md:9 +msgid "Only fonts in the ttf format are officially supported in Anki/AnkiDroid; the [Google Noto](https://fonts.google.com/noto) font set is highly recommended for all languages, and some other free fonts can be found [here](https://github.com/ankidroid/Anki-Android/wiki/Freely-distributable-fonts)." +msgstr "" + +#: src/advanced-features/custom-fonts.md:11 +msgid "Please note that AnkiDroid has to load the entire font into memory in order to use it, and fonts for Asian languages can be quite large. If you have an older device and notice AnkiDroid crashing frequently after installing a font, you may have exceeded your device's memory limits. For Google Noto, it's not recommended to use the combined CJK font, rather get the individual languages [separately from here](https://github.com/googlei18n/noto-cjk)." +msgstr "" + +#: src/advanced-features/custom-fonts.md:13 +msgid "**Note 1**: If you have **Fetch media on sync** disabled, you may need to manually copy the font file from Anki Desktop to your AnkiDroid/collection.media folder." +msgstr "" + +#: src/advanced-features/custom-fonts.md:15 +msgid "**Note 2**: If you can't get your font to work after following the steps in here and the Anki Desktop manual, please refer to the FAQ for " +msgstr "" + +#: src/advanced-features/custom-fonts.md:15 +msgid "detailed steps on how to debug font issues" +msgstr "" + +#: src/advanced-features/customizing-card-layout.md:2 +msgid "The layout of flashcards is completely customizable, although this is an advanced topic with a fairly steep learning curve, and you will probably find it a lot more convenient to do the customization with [Anki Desktop](../anki-desktop.md). " +msgstr "" + +#: src/advanced-features/customizing-card-layout.md:4 +msgid "The [card templates section](https://docs.ankiweb.net/templates/intro.html) of the Anki Desktop manual has detailed instructions on how to edit note types, and most of the actions discussed there are also available from AnkiDroid by tapping **cards** at the bottom of the note editor, or choosing the **manage note types** option in the deck picker. Since detailed information on customizing card layouts is available in the Anki desktop manual, it will not be repeated here." +msgstr "" + +#: src/advanced-features/customizing-card-layout.md:6 +msgid "There is an [advanced formatting page](https://github.com/ankidroid/Anki-Android/wiki/Advanced-formatting) on the AnkiDroid wiki with various hints on how you can get the most out of your card formatting, and we encourage you to read it, and edit it freely if you have any tips that you'd like to share with the community." +msgstr "" + +#: src/advanced-features/type-in-answer.md:3 +msgid "AnkiDroid allows you to type in the correct answer and then compare it to the right answer. You have to set this up with Anki desktop, as described in the [Anki Desktop manual](https://docs.ankiweb.net/templates/fields.html#checking-your-answer)." +msgstr "" + +#: src/advanced-features/type-in-answer.md:5 +msgid "Anki desktop replaces the **{{type:NN}}** field on the front of a card with an input box in the card. On AnkiDroid it is replaced with a **......** prompt instead, and a text input box is shown at the bottom. The comparison between typed text and the correct text is shown on the answer side in place of the **{{type:NN}}** field there, like on Anki desktop." +msgstr "" + +#: src/advanced-features/type-in-answer.md:7 +msgid "The text input box and the soft keyboard can be hidden by ticking **Disable typing in answer** in the preferences." +msgstr "" + +#: src/advanced-features/type-in-answer.md:9 +msgid "Even with typing disabled, the correct answer is shown on the answer side. This is done on purpose; otherwise the correct answer might not be shown at all." +msgstr "" + +#: src/advanced-features/type-in-answer.md:11 +msgid "To hide the comparison (e.g. because the correct answer is shown anyway), the HTML id **typeans** can be used. Add following to the [card styling](https://docs.ankiweb.net/templates/styling.html#card-styling) using Anki Desktop." +msgstr "" + +#: src/advanced-features/type-in-answer.md:19 +msgid "The type answer prompt and the comparison have more classes that can be used to change the way they are displayed. Some of these are the same as on Anki Desktop, some are specific to AnkiDroid." +msgstr "" + +#: src/advanced-features/type-in-answer.md:21 +msgid "The comparison uses three classes, typeGood, typeBad and typeMissed to add green, red and gray background to the typing comparison. These three classes are used on Anki desktop as well." +msgstr "" + +#: src/advanced-features/type-in-answer.md:23 +msgid "The **......** prompt has the class **typePrompt**." +msgstr "" + +#: src/advanced-features/type-in-answer.md:25 +msgid "When typing is set to off in the preferences, the class **typeOff** is added to the prompt on the question side, and to the div element containing the comparison on the answer side. This class can be used to show the type prompt or to hide the typing comparison in this case." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:3 +msgid "If Advanced Statistics are enabled, it changes the **Forecast** graph so that it shows the estimated number of reviews that will be due on a given day in the future taking into account future reviews, learning new cards and failing cards. The bars and the left axis show the number of cards due on each day if you study all cards each day, while the line and the right axis show the number of unseen (shown as **learn**), young and mature cards your deck or collection will consist of if you study all cards each day. The forecast graph does count reviews that are currently overdue. It assumes that the overdue cards will be reviewed according to the **maximum reviews/day** deck option." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:5 +msgid "Advanced Statistics can be enabled in `Settings -> Advanced -> Advanced Statistics` (in plugin section)." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:7 +msgid "The outcome of future reviewing, learning or failing cards affects reviews after that future review. To take this into account, the probability of each outcome is computed from the review log. Then the outcome is randomly chosen, such that an outcome which is more likely according to the review log is more likely to be chosen than an outcome which is less likely according to the review log. The settings all affect how the effect of the outcome of future reviews on subsequent reviews is taken into account." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:9 +msgid "Compute first n days, simulate remainder" +msgstr "" + +#: src/advanced-features/advanced-statistics.md:10 +msgid "If this setting is set to a number greater than 0, instead of randomly choosing an outcome, each possible outcome is taken into account in the simulation, together with its probability. The probability is taken into account for the graph and for future reviews in which it results, which also affect the graph. One review has a couple of possible outcomes (say 4), which all result in a review. That review also has a couple of possible outcomes and so on. If many reviews are simulated this way, many reviews (4 x 4 x 4 x ... ) have to be taken into account which increases the time it takes to compose the graph. Therefore, for reviews later than n days from now are simulated by randomly choosing an outcome." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:14 +msgid "In summary, higher n gives a more accurate graph, but it takes more time to compose the graph." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:16 +msgid "Precision of computation" +msgstr "" + +#: src/advanced-features/advanced-statistics.md:18 +msgid "Reviews which occur with a probability smaller than 100% minus the configured precision of the computation are simulated by randomly choosing an outcome rather than taking into account each possible outcome. This setting is only applicable if the first n days are computed. If Advanced Statistics are disabled, the **Forecast** graph shows the estimated number of reviews that will be due on a given day in the future if you do not review cards, learn no new cards and fail no cards." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:21 +msgid "In summary, higher precision gives a more accurate graph, but it takes more time to compose the graph." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:23 +msgid "Number of iterations of the simulation" +msgstr "" + +#: src/advanced-features/advanced-statistics.md:24 +msgid "Composes the graph several times and then displays the average of these graphs. Each time the graph is composed, another outcome might be randomly chosen. If we average many outcomes which are randomly chosen taking into account the probabilities from the review log, the average outcome will likely be close to the average of the probabilities from the review log. If we average many graphs, the average graph will likely be close to the graph which is generated by taking into account all possible outcomes. If the number of graphs which are averaged is not too high, it will be faster than taking into account all possible outcomes." +msgstr "" + +#: src/advanced-features/advanced-statistics.md:29 +msgid "In summary, a higher number of iterations gives a more accurate graph, but it takes more time to compose the graph." +msgstr "" + +#: src/advanced-features/reminders.md:2 +msgid "AnkiDroid can remind you to devote some time to reviewing cards every day at a specific time via Android's notification framework. You can configure reminders for each options group independently. To configure a notification go to Deck options > Reminders, then tick the checkbox and select the time you want to be notified at. To stop receiving notifications go to Deck options > Reminders and unmark the checkbox." +msgstr "" + +#: src/advanced-features/reminders.md:7 +msgid "Notifications only work for top level decks. Please let us know if you want us to add notifications for subdecks too." +msgstr "" + +#: src/advanced-features/set-language-hint.md:2 +msgid "AnkiDroid has an in Automatic Language Selection feature in the Note Editor starting with AnkiDroid 2.13. This feature allows you to define a default language to be used in your keyboard for a field in a note type." +msgstr "" + +#: src/advanced-features/set-language-hint.md:5 +msgid "For example, if you have Russian and English note fields, and your keyboard supports the setImeHintLocales Android API, the keyboard layout will switch to Russian in the first field and back to English in the second automatically when the fields get focus. [Checkout video reference for demonstration](https://www.youtube.com/watch?v=JrxDjTrRhBE)" +msgstr "" + +#: src/help.md:1 +msgid "Help & Support" +msgstr "" + +#: src/help.md:3 +msgid "Before Asking" +msgstr "" + +#: src/help.md:5 +msgid "Before asking for help, please try searching through the [AnkiDroid Manual](intro.md), the list of [Frequently Asked Questions](https://github.com/ankidroid/Anki-Android/wiki/FAQ), and also the main [Anki Manual](https://docs.ankiweb.net) for general help with the Anki system and features, and any issues not limited to Android." +msgstr "" + +#: src/help.md:7 +msgid "Support" +msgstr "" + +#: src/help.md:8 +msgid "If you were unable to find what you needed in the documentation above, please visit the relevant site below:" +msgstr "" + +#: src/help.md:10 +msgid "Non-Android-Specific Issues" +msgstr "" + +#: src/help.md:11 +msgid "AnkiDroid (the Android version of Anki) is created and managed independently from other Anki versions. For the PC / Web / iOS versions, and general Anki issues that are not limited to Android, please visit the main [Anki support site](https://forums.ankiweb.net)." +msgstr "" + +#: src/help.md:13 +msgid "AnkiDroid Questions" +msgstr "" + +#: src/help.md:14 +msgid "For questions and help concerning AnkiDroid, please visit the [user forum](https://groups.google.com/g/anki-android), or you can send your questions to the forum's [public email address](mailto:public-forum@ankidroid.org) if you don't want to register on the forum." +msgstr "" + +#: src/help.md:16 +msgid "Bug Reports and Feature Requests" +msgstr "" + +#: src/help.md:17 +msgid "For bug reports and feature requests, please search through the current list of open issues on the [AnkiDroid issue tracker](https://github.com/ankidroid/Anki-Android/issues), and if there are no existing issues, create a new issue including as much information as possible. For bug reports, please also include the output of **debug info** by following the steps below: " +msgstr "" + +#: src/help.md:20 +msgid "Open the navigation drawer by tapping the button on the top left of the screen" +msgstr "" + +#: src/help.md:21 +msgid "Tap **settings**" +msgstr "" + +#: src/help.md:22 +msgid "Tap **advanced**" +msgstr "" + +#: src/help.md:23 +msgid "Tap **about AnkiDroid** at the bottom" +msgstr "" + +#: src/help.md:24 +msgid "Tap the **copy debug info** button at the bottom (which copies **debug info** to the clipboard)" +msgstr "" + +#: src/help.md:25 +msgid "If filling out the bug report on your mobile device, paste the contents of the clipboard directly to the issue. Alternatively, you can paste the contents of the clipboard into a new email, send it to yourself, then copy and paste that into the bug report from your computer." +msgstr "" + +#: src/help.md:27 +msgid "![DebugInfo.png](img/DebugInfo.png)" +msgstr "" + +#: src/help.md:29 +msgid "**Note:** if you are unable to open the app at all, so cannot even access **settings** then please follow [these instructions](https://github.com/ankidroid/Anki-Android/wiki/Unopenable-collections)." +msgstr "" + +#: src/help.md:31 +msgid "This **debug info** is important as it allows us to match your report with our internal crash report data. " +msgstr "" + +#: src/help.md:34 +msgid "AnkiDroid is an open source project, and anyone is welcome to contribute (including non-developers)! For help with contributing to AnkiDroid, please first check the [contribution wiki page](https://github.com/ankidroid/Anki-Android/wiki/Contributing), and ask any further questions in the [main forum](https://groups.google.com/g/anki-android)." +msgstr "" + +#: src/beta-testing.md:2 +msgid "If you want to try out the latest features in AnkiDroid, you can sign up for the beta testing program as follows:" +msgstr "" + +#: src/beta-testing.md:4 +msgid "Visit the [Google Play Beta page](https://play.google.com/apps/testing/com.ichi2.anki)" +msgstr "" + +#: src/beta-testing.md:5 +msgid "Click **Become a beta tester**" +msgstr "" + +#: src/beta-testing.md:7 +msgid "After following these steps, the latest beta version will automatically be installed by Google Play in the same way as ordinary updates." +msgstr "" + +#: src/beta-testing.md:9 +msgid "If you are more adventurous, you can also become an alpha tester, by joining the [alpha testers group](https://groups.google.com/g/ankidroidalphatesters) in addition to performing the above steps for beta testing." +msgstr "" + +#: src/beta-testing.md:11 +msgid "Please submit any bugs you find in these development versions to the AnkiDroid issue tracker, as per the [main help page](help.md)." +msgstr "" + +#: src/beta-testing.md:13 +msgid "If you wish to leave the testing program at any time, simply visit the [Google Play Beta page](https://play.google.com/apps/testing/com.ichi2.anki) and click **Leave the test**." +msgstr "" + +#: src/contributing.md:3 +msgid "[Get involved](#get-involved)" +msgstr "" + +#: src/contributing.md:4 +msgid "[Translate](#translate)" +msgstr "" + +#: src/contributing.md:5 +msgid "[Develop](#develop)" +msgstr "" + +#: src/contributing.md:7 +msgid "AnkiDroid is an open source project, and its development relies on contributions from volunteers. Here are some of the ways you can contribute to the AnkiDroid project:" +msgstr "" + +#: src/contributing.md:9 +msgid "Get involved" +msgstr "" + +#: src/contributing.md:10 +msgid "Rate the app, join the [AnkiDroid forum](https://groups.google.com/g/anki-android) and answer questions for other users, submit bug reports, become a [beta tester](beta-testing.md), etc. More detailed information on ways you can contribute as a non-developer can be found on the [Wiki](https://github.com/ankidroid/Anki-Android/wiki/Contributing)." +msgstr "" + +#: src/contributing.md:12 +msgid "Translate" +msgstr "" + +#: src/contributing.md:13 +msgid "Translations of AnkiDroid and this user manual are all contributed by users, and are greatly appreciated. See the " +msgstr "" + +#: src/contributing.md:14 +msgid "translating" +msgstr "" + +#: src/contributing.md:14 +msgid " wiki page for detailed instructions on how to contribute translations." +msgstr "" + +#: src/contributing.md:16 +msgid "Develop" +msgstr "" + +#: src/contributing.md:17 +msgid "The source code for AnkiDroid is available on our main [Github page](https://github.com/ankidroid/Anki-Android), and bug fixes as well as new features are very welcome. Before investing a lot of time on working on a new feature, you may like to ask on the forum first if it's likely to be merged into the main project, as not all features will be accepted. If you are just getting started with Android programming, feel free to ask on the forum for some tips and/or tasks which are suitable for beginners." +msgstr "" + +#: src/changelog/v2.15.md:1 +msgid "Version 2.15.6 (20210714)" +msgstr "" + +#: src/changelog/v2.15.md:2 +msgid "One more crash fix, no crashes shall be left unfixed! If we can help it." +msgstr "" + +#: src/changelog/v2.15.md:4 +msgid "Version 2.15.5 (20210713)" +msgstr "" + +#: src/changelog/v2.15.md:5 +msgid "[🤜🤛 Thank you! Your support makes the fixes happen!](https://opencollective.com/ankidroid)" +msgstr "" + +#: src/changelog/v2.15.md:6 +msgid "Full-screen navigation drawer drag is a preference, default off" +msgstr "" + +#: src/changelog/v2.15.md:7 +msgid "Floating Action Button ('+') labels are clickable again" +msgstr "" + +#: src/changelog/v2.15.md:8 +msgid "Fixed crash on first run post-install on tablets" +msgstr "" + +#: src/changelog/v2.15.md:9 +msgid "Fixed odd weekly breakdown stats chart behavior" +msgstr "" + +#: src/changelog/v2.15.md:10 +msgid "Fixed crash creating new deck from deck chooser" +msgstr "" + +#: src/changelog/v2.15.md:11 +msgid "[Updated translations](https://crowdin.com/project/ankidroid) (thank you translators!)" +msgstr "" + +#: src/changelog/v2.15.md:12 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/47?closed=1)" +msgstr "" + +#: src/changelog/v2.15.md:13 +msgid "We are deep into development for v2.16 + Google Summer of Code, lots of new stuff coming" +msgstr "" + +#: src/changelog/v2.15.md:14 +msgid "Happy reviewing!" +msgstr "" + +#: src/changelog/v2.15.md:16 +msgid "Version 2.15.4 (20210602)" +msgstr "" + +#: src/changelog/v2.15.md:17 +msgid "Saw one crash show up for 2.15.3: if you touched the 3 numbers instead of the deck name on the deck list on phones, it would crash" +msgstr "" + +#: src/changelog/v2.15.md:19 +msgid "Temporarily revert full screen navigation drawer option to fix" +msgstr "" + +#: src/changelog/v2.15.md:21 +msgid "Version 2.15.3 (20210602)" +msgstr "" + +#: src/changelog/v2.15.md:22 +msgid "[❤️ Thank you so much for the donations! We appreciate it ❤️](https://opencollective.com/ankidroid)" +msgstr "" + +#: src/changelog/v2.15.md:23 +msgid "Another batch of fixes stabilizing all the work done for AnkiDroid 2.15" +msgstr "" + +#: src/changelog/v2.15.md:24 +msgid "Fix \"Search All Decks\" in Card Browser not searching" +msgstr "" + +#: src/changelog/v2.15.md:25 +msgid "Make new full screen navigation drawer open optional, default off" +msgstr "" + +#: src/changelog/v2.15.md:26 +msgid "Preserve edited search in card browser if navigation drawer opens" +msgstr "" + +#: src/changelog/v2.15.md:27 +msgid "Fix crash editing Tags dialog when switching back from another app" +msgstr "" + +#: src/changelog/v2.15.md:28 +msgid "Fix incorrect cloze help link" +msgstr "" + +#: src/changelog/v2.15.md:29 +msgid "Increase touchable area of undo icon" +msgstr "" + +#: src/changelog/v2.15.md:30 +msgid "Fix legacy / handebar template parsing" +msgstr "" + +#: src/changelog/v2.15.md:31 +msgid "Fix icon sizes for notifications and search" +msgstr "" + +#: src/changelog/v2.15.md:32 +msgid "Fix audio files incorrectly importing when attached" +msgstr "" + +#: src/changelog/v2.15.md:33 +msgid "Fix deck options \"steps\" showing up with lots of decimal places" +msgstr "" + +#: src/changelog/v2.15.md:34 +msgid "Update translations, add Kannada language" +msgstr "" + +#: src/changelog/v2.15.md:35 +msgid "Fix F-Droid app store publishing" +msgstr "" + +#: src/changelog/v2.15.md:36 +msgid "Correct navigation away from and back to Changelog" +msgstr "" + +#: src/changelog/v2.15.md:37 +msgid "Fix template parsing for \"{{FrontSide}}\"" +msgstr "" + +#: src/changelog/v2.15.md:38 +msgid "Fix stats tab view layout in RTL context" +msgstr "" + +#: src/changelog/v2.15.md:39 +msgid "Fix preview of cloze cards from note editor " +msgstr "" + +#: src/changelog/v2.15.md:40 +msgid "[Full changelog here](https://github.com/ankidroid/Anki-Android/milestone/45?closed=1)" +msgstr "" + +#: src/changelog/v2.15.md:43 +msgid "Version 2.15.2 (20210526)" +msgstr "" + +#: src/changelog/v2.15.md:44 +msgid "[❤️ Your donations here give us the time to work on the app, thank you! ❤️](https://opencollective.com/ankidroid)" +msgstr "" + +#: src/changelog/v2.15.md:45 src/changelog/v2.15.md:58 +msgid "🔥 Hot fixes for 2.15.0 issues (See below for 2.15.0 notes 👇 it was a huge release!)" +msgstr "" + +#: src/changelog/v2.15.md:46 +msgid "2.15 should have no regressions now we think 🤞 " +msgstr "" + +#: src/changelog/v2.15.md:47 +msgid "That means we'll slow down the releases and these popups now, sorry + thank you " +msgstr "" + +#: src/changelog/v2.15.md:48 +msgid "Fix another API issue breaking card add from external apps" +msgstr "" + +#: src/changelog/v2.15.md:49 +msgid "Fix conditional template issue that caused blank cards for some" +msgstr "" + +#: src/changelog/v2.15.md:50 +msgid "Fix auto-advance ignoring \"no advance\" setting if card had audio" +msgstr "" + +#: src/changelog/v2.15.md:51 +msgid "Gracefully handle corrupt collections with invalid current decks selected" +msgstr "" + +#: src/changelog/v2.15.md:52 +msgid "Publish to Amazon App Store again (go get AnkiDroid on your Fire devices!)" +msgstr "" + +#: src/changelog/v2.15.md:53 +msgid "[Issue tracker milestone here](https://github.com/ankidroid/Anki-Android/milestone/44?closed=1)" +msgstr "" + +#: src/changelog/v2.15.md:56 +msgid "Version 2.15.1 (20210525)" +msgstr "" + +#: src/changelog/v2.15.md:57 +msgid "[❤️ Your donations funded this rapid set of fixes, enjoy! ❤️](https://opencollective.com/ankidroid)" +msgstr "" + +#: src/changelog/v2.15.md:59 +msgid "Do not auto-update users to scheduler v2. Yet." +msgstr "" + +#: src/changelog/v2.15.md:60 +msgid "Fix crash on undo after deck delete" +msgstr "" + +#: src/changelog/v2.15.md:61 +msgid "Try harder to successfully paste images" +msgstr "" + +#: src/changelog/v2.15.md:62 +msgid "Reviewer performance fix - only load mathjax if needed" +msgstr "" + +#: src/changelog/v2.15.md:63 +msgid "Fixed compatibility issue for 2.15 collections on 2.14" +msgstr "" + +#: src/changelog/v2.15.md:64 +msgid "Fixed API issue breaking card add from external apps" +msgstr "" + +#: src/changelog/v2.15.md:65 +msgid "Fresh language translations. See a bad translation? [You can fix it easily!](https://crowdin.com/project/ankidroid)" +msgstr "" + +#: src/changelog/v2.15.md:66 +msgid "[Detailed issue log](https://github.com/ankidroid/Anki-Android/milestone/43?closed=1)" +msgstr "" + +#: src/changelog/v2.15.md:68 +msgid "Version 2.15.0 (20210524)" +msgstr "" + +#: src/changelog/v2.15.md:69 +msgid "[❤️ Your donations funded these features, enjoy! ❤️](https://opencollective.com/ankidroid)" +msgstr "" + +#: src/changelog/v2.15.md:70 +msgid "Thanks to [Google Summer of Code](https://github.com/ankidroid/Anki-Android/wiki/Google-Summer-of-Code-2021) students for a HUGE effort!" +msgstr "" + +#: src/changelog/v2.15.md:71 +msgid "Way too many changes to describe, but here are the highlights:" +msgstr "" + +#: src/changelog/v2.15.md:72 +msgid "New timezone code supported for sync with AnkiDesktop!" +msgstr "" + +#: src/changelog/v2.15.md:73 +msgid "Performance, stability improvements everywhere" +msgstr "" + +#: src/changelog/v2.15.md:74 +msgid "General UI improvements (accessibility, dark mode, design, more)" +msgstr "" + +#: src/changelog/v2.15.md:75 +msgid "Many new keyboard shortcuts and gesture actions" +msgstr "" + +#: src/changelog/v2.15.md:76 +msgid "Languages: Added Odia, Malayalam; big RTL support improvements!" +msgstr "" + +#: src/changelog/v2.15.md:77 +msgid "Reviewer: Javascript API: many new methods" +msgstr "" + +#: src/changelog/v2.15.md:78 +msgid "Improved account login, sync conflict, card template UI" +msgstr "" + +#: src/changelog/v2.15.md:79 +msgid "Tags and Decks dialogs have search!" +msgstr "" + +#: src/changelog/v2.15.md:80 +msgid "Whiteboard: erase, pen colors, stroke width" +msgstr "" + +#: src/changelog/v2.15.md:81 +msgid "NoteEditor: Mathjax 3, capitalize sentences setting" +msgstr "" + +#: src/changelog/v2.15.md:82 +msgid "Huge quality improvements all over codebase, helps future developers" +msgstr "" + +#: src/changelog/v2.15.md:83 +msgid "[🚧 Full 638 item changelog here! 🚧](https://github.com/ankidroid/Anki-Android/milestone/37?closed=1)" +msgstr "" + +#: src/changelog/v2.14.md:1 +msgid "Version 2.14.6 (20210309)" +msgstr "" + +#: src/changelog/v2.14.md:2 +msgid "Reviewer: fix \"my card is blank now with 2.14.5! help!\" 😱" +msgstr "" + +#: src/changelog/v2.14.md:3 +msgid "Reviewer: fix Android 8/8.1 review buttons disappear (finally?)" +msgstr "" + +#: src/changelog/v2.14.md:5 +msgid "Version 2.14.5 (20210307)" +msgstr "" + +#: src/changelog/v2.14.md:6 +msgid "We really appreciate the [donations](https://opencollective.com/ankidroid), they paid for these fixes 🤝" +msgstr "" + +#: src/changelog/v2.14.md:7 +msgid "NoteEditor: Android 11 users can crop!" +msgstr "" + +#: src/changelog/v2.14.md:8 +msgid "NoteEditor: Canceling crop twice won't delete your image" +msgstr "" + +#: src/changelog/v2.14.md:9 +msgid "DeckList: parent limits altered to match Desktop" +msgstr "" + +#: src/changelog/v2.14.md:10 +msgid "DeckList: current deck saved as correct type" +msgstr "" + +#: src/changelog/v2.14.md:11 +msgid "SchedulerV2: allow very small delays" +msgstr "" + +#: src/changelog/v2.14.md:12 +msgid "KNOWN ISSUE: [Android 8/8.1 answer buttons disappear](https://github.com/ankidroid/Anki-Android/issues/7369). Use gestures as workaround." +msgstr "" + +#: src/changelog/v2.14.md:13 +msgid "Anyone with Android 8/8.1 that reproduces this and knows how to develop Android layouts? We'd love the help!" +msgstr "" + +#: src/changelog/v2.14.md:15 +msgid "Version 2.14.4 (20210307)" +msgstr "" + +#: src/changelog/v2.14.md:16 +msgid "Re-released immediately as 2.14.5 after release script issue 🤷😅" +msgstr "" + +#: src/changelog/v2.14.md:18 +msgid "Version 2.14.3 (20210109)" +msgstr "" + +#: src/changelog/v2.14.md:19 +msgid "[The AnKing](https://www.youtube.com/c/TheAnKing) has graced us with a [new intro video](https://youtu.be/iuBU_OM9oAM)! 🤓" +msgstr "" + +#: src/changelog/v2.14.md:20 +msgid "Still happily overwhelmed by the [donations](https://opencollective.com/ankidroid) 💪" +msgstr "" + +#: src/changelog/v2.14.md:21 +msgid "Reviewer: Fix mark note keyboard shortcut" +msgstr "" + +#: src/changelog/v2.14.md:22 +msgid "NoteEditor: Fix to remove padding if removing formatting toolbar" +msgstr "" + +#: src/changelog/v2.14.md:23 +msgid "Previewer: Fix to show same card after edit" +msgstr "" + +#: src/changelog/v2.14.md:24 +msgid "Scheduler: Fix v1 scheduler completes deck when only learn cards due" +msgstr "" + +#: src/changelog/v2.14.md:26 +msgid "Version 2.14.2 (20201202)" +msgstr "" + +#: src/changelog/v2.14.md:27 +msgid "Wow! We are humbled by the [donations](https://opencollective.com/ankidroid) 🤯" +msgstr "" + +#: src/changelog/v2.14.md:28 +msgid "The resources are already going to contributors to improve the app! Thank you ❤️ " +msgstr "" + +#: src/changelog/v2.14.md:29 +msgid "Note Editor: Fix image crop not working first time" +msgstr "" + +#: src/changelog/v2.14.md:30 +msgid "Note Editor: Paste image at cursor not end" +msgstr "" + +#: src/changelog/v2.14.md:31 +msgid "Note Editor: Fix Ctrl+C opens preview" +msgstr "" + +#: src/changelog/v2.14.md:32 +msgid "Note Editor: Add menubar toggle to disable editing toolbar" +msgstr "" + +#: src/changelog/v2.14.md:33 +msgid "Home Screen: Fix Vivo device shortcut creation (again)" +msgstr "" + +#: src/changelog/v2.14.md:34 +msgid "Reviewer: Fix numeric keypad not working" +msgstr "" + +#: src/changelog/v2.14.md:35 +msgid "Note Editor: Fix cloze cards going to wrong deck" +msgstr "" + +#: src/changelog/v2.14.md:36 +msgid "Navigation Menu: Fix safe display app hang" +msgstr "" + +#: src/changelog/v2.14.md:37 +msgid "Preferences: Fix gestures menu translation / ordering issue" +msgstr "" + +#: src/changelog/v2.14.md:38 +msgid "Translations: thanks [translators!](https://crowdin.com/project/ankidroid/activity_stream) - you can help too!" +msgstr "" + +#: src/changelog/v2.14.md:39 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/39?closed=1)" +msgstr "" + +#: src/changelog/v2.14.md:41 +msgid "Version 2.14.1 (2020-11-23)" +msgstr "" + +#: src/changelog/v2.14.md:42 +msgid "Always free, always open source, but you may [donate if you like 😊](https://opencollective.com/ankidroid)" +msgstr "" + +#: src/changelog/v2.14.md:43 +msgid "Move sync button to right of action bar (vs search)" +msgstr "" + +#: src/changelog/v2.14.md:44 +msgid "Fix duplicate note detection" +msgstr "" + +#: src/changelog/v2.14.md:45 +msgid "Fix add deck shortcut on Vivo devices" +msgstr "" + +#: src/changelog/v2.14.md:46 +msgid "Fix non-translatable 'Card Info' strings" +msgstr "" + +#: src/changelog/v2.14.md:47 +msgid "Fix suspended card handling in filtered decks" +msgstr "" + +#: src/changelog/v2.14.md:48 +msgid "Sync translations from volunteers on our crowdin.com site (thank you!)" +msgstr "" + +#: src/changelog/v2.14.md:49 +msgid "Fix crash on mismatched WebView ABIs" +msgstr "" + +#: src/changelog/v2.14.md:50 +msgid "Fix crash invalid filename handling while pasting image" +msgstr "" + +#: src/changelog/v2.14.md:51 +msgid "Fix crash selecting cards in card browser" +msgstr "" + +#: src/changelog/v2.14.md:52 +msgid "Fix crash Android 8 in card browser" +msgstr "" + +#: src/changelog/v2.14.md:53 +msgid "Fix crash in undo labeling" +msgstr "" + +#: src/changelog/v2.14.md:54 +msgid "Fix crash reset password when system browser not exported" +msgstr "" + +#: src/changelog/v2.14.md:55 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/38?closed=1)" +msgstr "" + +#: src/changelog/v2.14.md:57 +msgid "Version 2.14.0 (2020-11-18)" +msgstr "" + +#: src/changelog/v2.14.md:58 +msgid "Enabled Donations - we ❤️ you, [now you can ❤️ us 😊](https://opencollective.com/ankidroid)" +msgstr "" + +#: src/changelog/v2.14.md:59 +msgid "New Screen: Card Info (from Card Browser or as a Reviewer App Bar Button)" +msgstr "" + +#: src/changelog/v2.14.md:60 +msgid "New Screen: Help - easy access to manual, many community pages/manuals, donation page, translations" +msgstr "" + +#: src/changelog/v2.14.md:61 +msgid "Home screen: Add deck shortcut" +msgstr "" + +#: src/changelog/v2.14.md:62 +msgid "Deck Options: SchedV2: Support setting \"Hard Factor\" " +msgstr "" + +#: src/changelog/v2.14.md:63 +msgid "Card Browser: Add deck filtering" +msgstr "" + +#: src/changelog/v2.14.md:64 +msgid "Card Browser: Filter By Flag" +msgstr "" + +#: src/changelog/v2.14.md:65 +msgid "Card Browser: Adding cards defaults to selected deck" +msgstr "" + +#: src/changelog/v2.14.md:66 +msgid "Card Browser: Many more keyboard shortcuts" +msgstr "" + +#: src/changelog/v2.14.md:67 +msgid "Card Browser: Display the number of cards deleted when deleting a note" +msgstr "" + +#: src/changelog/v2.14.md:68 +msgid "Card Browser: Better handling of deck searches containing wildcards" +msgstr "" + +#: src/changelog/v2.14.md:69 +msgid "Reviewer: Basic Android TV Support" +msgstr "" + +#: src/changelog/v2.14.md:70 +msgid "Reviewer: New Gesture: Abort Learning & Sync" +msgstr "" + +#: src/changelog/v2.14.md:71 +msgid "Reviewer: Support AnkiMobile 9-area gesture touch layout" +msgstr "" + +#: src/changelog/v2.14.md:72 +msgid "Reviewer: Improve \"Empty Card\" UX" +msgstr "" + +#: src/changelog/v2.14.md:73 +msgid "Reviewer: Keyboard shortcuts for flags (Ctrl+1...4)" +msgstr "" + +#: src/changelog/v2.14.md:74 +msgid "Note Editor: Editor Toolbar (& keyboard shortcuts) - hugely requested feature!" +msgstr "" + +#: src/changelog/v2.14.md:75 +msgid "Note Editor Toolbar: Apply Custom Commands (& keyboard shortcuts)" +msgstr "" + +#: src/changelog/v2.14.md:76 +msgid "Note Editor: Paste to Insert Image" +msgstr "" + +#: src/changelog/v2.14.md:77 +msgid "Note Editor: Made fields full-width" +msgstr "" + +#: src/changelog/v2.14.md:78 +msgid "Note Editor: Change Font Size for fields" +msgstr "" + +#: src/changelog/v2.14.md:79 +msgid "Note Editor: Expand/Collapse Fields" +msgstr "" + +#: src/changelog/v2.14.md:80 +msgid "Note Editor: Clear Field button" +msgstr "" + +#: src/changelog/v2.14.md:81 +msgid "Note Editor: Ctrl+Shift+Num to switch fields" +msgstr "" + +#: src/changelog/v2.14.md:82 +msgid "Note Editor: Improved image addition / naming" +msgstr "" + +#: src/changelog/v2.14.md:83 +msgid "Note Editor: Add preference to convert newline to HTML (or not)" +msgstr "" + +#: src/changelog/v2.14.md:84 +msgid "OS Integration: Default to \"Anki Card\" in system context menu vs \"Card Browser\"" +msgstr "" + +#: src/changelog/v2.14.md:85 +msgid "Libanki: Add FileUpload API" +msgstr "" + +#: src/changelog/v2.14.md:86 +msgid "Translations: Tagged screenshots on crowdin.com to help our translators" +msgstr "" + +#: src/changelog/v2.14.md:87 +msgid "Stability: Fix rare crashes (down to ~50/day total w/1.8million installs!)" +msgstr "" + +#: src/changelog/v2.14.md:88 +msgid "Performance: massive number of speedups" +msgstr "" + +#: src/changelog/v2.14.md:89 +msgid "Dev: Massively sped up AnkiDroid builds and improved code readability" +msgstr "" + +#: src/changelog/v2.14.md:90 +msgid "Totals: 345 code changes and hundreds of translations, made by volunteers, in 2 months" +msgstr "" + +#: src/changelog/v2.14.md:91 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/30?closed=1)" +msgstr "" + +#: src/changelog/v2.13.md:1 +msgid "Version 2.13.5 (2020-10-03)" +msgstr "" + +#: src/changelog/v2.13.md:2 +msgid "Fix performance for fast (\\<1s) answers in review" +msgstr "" + +#: src/changelog/v2.13.md:3 +msgid "Add links to new Arabic help/manual translation" +msgstr "" + +#: src/changelog/v2.13.md:4 +msgid "Add back button handling to changelog display" +msgstr "" + +#: src/changelog/v2.13.md:5 +msgid "Add rate button to changelog" +msgstr "" + +#: src/changelog/v2.13.md:6 +msgid "Add warning message to handle future db upgrades" +msgstr "" + +#: src/changelog/v2.13.md:7 +msgid "Sync all translations from our volunteer translators (thanks everyone!)" +msgstr "" + +#: src/changelog/v2.13.md:9 +msgid "Version 2.13.4 (2020-09-29)" +msgstr "" + +#: src/changelog/v2.13.md:10 +msgid "Fix crash showing TagsDialog" +msgstr "" + +#: src/changelog/v2.13.md:11 +msgid "Fix crash in gesture detection" +msgstr "" + +#: src/changelog/v2.13.md:12 +msgid "Improve import interrupted error message" +msgstr "" + +#: src/changelog/v2.13.md:13 +msgid "Fix scheduler counts after undo" +msgstr "" + +#: src/changelog/v2.13.md:14 +msgid "Fix Card Browser preview after sort" +msgstr "" + +#: src/changelog/v2.13.md:15 +msgid "Fix button display if answer animation incomplete" +msgstr "" + +#: src/changelog/v2.13.md:16 +msgid "Sync all translations" +msgstr "" + +#: src/changelog/v2.13.md:18 +msgid "Version 2.13.3 (2020-09-23)" +msgstr "" + +#: src/changelog/v2.13.md:19 +msgid "Fix double-clicking answer buttons skipping cards" +msgstr "" + +#: src/changelog/v2.13.md:20 +msgid "Change missing media warning to twice-per-session not twice-per-deck" +msgstr "" + +#: src/changelog/v2.13.md:21 +msgid "Change answer button fade on open" +msgstr "" + +#: src/changelog/v2.13.md:22 +msgid "Updated all translations from volunteer crowdin.com site up to 20200923" +msgstr "" + +#: src/changelog/v2.13.md:24 +msgid "Version 2.13.2 (2020-09-19)" +msgstr "" + +#: src/changelog/v2.13.md:25 +msgid "Fix Crash rare on Card Browser exit" +msgstr "" + +#: src/changelog/v2.13.md:26 +msgid "Fix Crash Android 4.4" +msgstr "" + +#: src/changelog/v2.13.md:27 +msgid "Fix Open Deck failures / improve related messaging" +msgstr "" + +#: src/changelog/v2.13.md:28 +msgid "Fix messaging for Xioami cloze workaround" +msgstr "" + +#: src/changelog/v2.13.md:29 +msgid "Move \"set field language\" after share on Note Editor context menu" +msgstr "" + +#: src/changelog/v2.13.md:31 +msgid "Version 2.13.1 (2020-09-17)" +msgstr "" + +#: src/changelog/v2.13.md:32 +msgid "Add cloze via clipboard paste workaround on MIUI/Xiaomi devices" +msgstr "" + +#: src/changelog/v2.13.md:33 +msgid "Fix Navigation drawer respects safe display / disable animations preference" +msgstr "" + +#: src/changelog/v2.13.md:34 +msgid "Fix Reviewer buttons respect safe display / disable animations preference" +msgstr "" + +#: src/changelog/v2.13.md:35 +msgid "Fix Deck Picker bottom bar opacity" +msgstr "" + +#: src/changelog/v2.13.md:36 +msgid "Fix Error message about missing content on cards" +msgstr "" + +#: src/changelog/v2.13.md:37 +msgid "Fix crash selecting deck that disappears during sync" +msgstr "" + +#: src/changelog/v2.13.md:39 +msgid "Version 2.13.0 (2020-09-15)" +msgstr "" + +#: src/changelog/v2.13.md:40 +msgid "Field tag (such as \"{{Front}}\") appearing in a note's field will be shown as-is in cards." +msgstr "" + +#: src/changelog/v2.13.md:41 +msgid "Add Sync icon badge when changes are pending sync (can be disabled in options)" +msgstr "" + +#: src/changelog/v2.13.md:42 +msgid "Add Edit Note from card Preview while in Card Browser" +msgstr "" + +#: src/changelog/v2.13.md:43 +msgid "Add \"Anki Card\" to system context menu (like \"Card Browser\") - disabled by default" +msgstr "" + +#: src/changelog/v2.13.md:44 +msgid "Add Set keyboard language for specific fields in the note editor (example: one field Japanese, other field Portuguese for input)." +msgstr "" + +#: src/changelog/v2.13.md:45 +msgid "Add Keep keyboard open after adding a note" +msgstr "" + +#: src/changelog/v2.13.md:46 +msgid "Add Card properties available in JavaScript API" +msgstr "" + +#: src/changelog/v2.13.md:47 +msgid "Add JavaScript API versioning for scripts (basis for future plugins)" +msgstr "" + +#: src/changelog/v2.13.md:48 +msgid "Add Auto-Login when selecting saved user account" +msgstr "" + +#: src/changelog/v2.13.md:49 +msgid "Add Allow import of collection.anki21 files when under SchedV1" +msgstr "" + +#: src/changelog/v2.13.md:50 +msgid "Add New screen for first-time users" +msgstr "" + +#: src/changelog/v2.13.md:51 +msgid "Add Button animations when answering cards" +msgstr "" + +#: src/changelog/v2.13.md:52 +msgid "Add Note Editor: Add shortcuts Ctrl+(Alt)+Shift+C to add a cloze." +msgstr "" + +#: src/changelog/v2.13.md:53 +msgid "Fix Some cards in learning were not shown at the right time (Only if you undo/bury/suspend/reset/reschedule and the next card goes to learning mode)" +msgstr "" + +#: src/changelog/v2.13.md:54 +msgid "Fix Selected deck has translucent background if a deck picker background is set" +msgstr "" + +#: src/changelog/v2.13.md:55 +msgid "Fix Improved preview screens" +msgstr "" + +#: src/changelog/v2.13.md:56 +msgid "Fix Better accessibility in Deck Browser for partially sighted users" +msgstr "" + +#: src/changelog/v2.13.md:57 +msgid "Fix Improve visibility of \"Add/Remove Option Group\"" +msgstr "" + +#: src/changelog/v2.13.md:58 +msgid "Fix Improved messages for sync rate limiting error" +msgstr "" + +#: src/changelog/v2.13.md:59 +msgid "Fix Improved messages for reducing study limits" +msgstr "" + +#: src/changelog/v2.13.md:60 +msgid "Fix Improved messaging when collection is missing media" +msgstr "" + +#: src/changelog/v2.13.md:61 +msgid "Fix Improve feedback when accessing Debug Info" +msgstr "" + +#: src/changelog/v2.13.md:62 +msgid "Fix Add additional warnings to reschedule dialog" +msgstr "" + +#: src/changelog/v2.13.md:63 +msgid "Fix Whiteboard pen color can be disabled by pressing icon again" +msgstr "" + +#: src/changelog/v2.13.md:64 +msgid "Fix Ensure all menu items in the reviewer can be customized by \"App Bar Buttons\" setting" +msgstr "" + +#: src/changelog/v2.13.md:65 +msgid "Fix Scheduler discrepancy handling early interval on filtered decks" +msgstr "" + +#: src/changelog/v2.13.md:66 +msgid "Fix Exports work when cards are missing media" +msgstr "" + +#: src/changelog/v2.13.md:67 +msgid "Fix Crash due to logging." +msgstr "" + +#: src/changelog/v2.13.md:68 +msgid "Fix Toasts used to show one more card than the number of card actually reviewed during the time box" +msgstr "" + +#: src/changelog/v2.13.md:69 +msgid "Fix Handle newlines properly in Note Editor Preview" +msgstr "" + +#: src/changelog/v2.13.md:70 +msgid "Fix Improve AnkiDroid opening animation" +msgstr "" + +#: src/changelog/v2.13.md:71 +msgid "Fix Show correct answer button when answering via Keyboard" +msgstr "" + +#: src/changelog/v2.13.md:72 +msgid "Fix \"New Cards Added\" Statistic" +msgstr "" + +#: src/changelog/v2.13.md:73 +msgid "Fix Crash when inserting a cloze when selecting text from right-to-left via keyboard" +msgstr "" + +#: src/changelog/v2.13.md:74 +msgid "Fix \"Show Password\" icon revealing saved password" +msgstr "" + +#: src/changelog/v2.13.md:75 +msgid "Fix Card browser still contains card after the app goes into background" +msgstr "" + +#: src/changelog/v2.13.md:76 +msgid "Fix Daily unbury occurs during sync if necessary" +msgstr "" + +#: src/changelog/v2.13.md:77 +msgid "Fix On big screen, buttons moved during loading" +msgstr "" + +#: src/changelog/v2.13.md:78 +msgid "Translators If some text change because of minor changes (typos) you won't have to translate it again" +msgstr "" + +#: src/changelog/v2.13.md:79 +msgid "Performance improvements (specifically: initial loading of large collection (lot of decks, note type, card type, fields, long templates...), card browser, deck picker startup, next card view, undo, cancelling tasks such as computing a list of card in browser)" +msgstr "" + +#: src/changelog/v2.13.md:80 +msgid "Dev: Massive dev workflow improvements and automated checks for our translations." +msgstr "" + +#: src/changelog/v2.13.md:81 +msgid "Dev: Implement backend for CSV Importer" +msgstr "" + +#: src/changelog/v2.13.md:82 +msgid "Dev: Improve crash reporting on app startup" +msgstr "" + +#: src/changelog/v2.13.md:83 +msgid "Dev: Massive improvement in testing, especially around scheduler / card queue behavior" +msgstr "" + +#: src/changelog/v2.13.md:84 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/27?closed=1)" +msgstr "" + +#: src/changelog/v2.12.md:1 +msgid "Version 2.12.1 (2020-07-21)" +msgstr "" + +#: src/changelog/v2.12.md:2 +msgid "Fix bug previewing edited notes after changing field count" +msgstr "" + +#: src/changelog/v2.12.md:3 +msgid "Fix crash previewing edited notes from dynamic decks" +msgstr "" + +#: src/changelog/v2.12.md:4 +msgid "Fix crash restarting app after a crash" +msgstr "" + +#: src/changelog/v2.12.md:5 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/28?closed=1)" +msgstr "" + +#: src/changelog/v2.12.md:7 +msgid "Version 2.12.0 (2020-07-18)" +msgstr "" + +#: src/changelog/v2.12.md:8 +msgid "Add Crop image feature" +msgstr "" + +#: src/changelog/v2.12.md:9 +msgid "Add Preview in note editor" +msgstr "" + +#: src/changelog/v2.12.md:10 +msgid "Add edit tags in reviewer" +msgstr "" + +#: src/changelog/v2.12.md:11 +msgid "Add volume buttons as gestures" +msgstr "" + +#: src/changelog/v2.12.md:12 +msgid "Add whiteboard pen color" +msgstr "" + +#: src/changelog/v2.12.md:13 +msgid "Add microphone tool bar in reviewer" +msgstr "" + +#: src/changelog/v2.12.md:14 +msgid "Add javascript API (check the Wiki!)" +msgstr "" + +#: src/changelog/v2.12.md:15 +msgid "Improve: app is 3MB smaller" +msgstr "" + +#: src/changelog/v2.12.md:16 +msgid "Fix: show whole tag in tags dialog" +msgstr "" + +#: src/changelog/v2.12.md:17 +msgid "Fix copy note copies tags too" +msgstr "" + +#: src/changelog/v2.12.md:18 +msgid "Fix data corruption canceling template edits" +msgstr "" + +#: src/changelog/v2.12.md:19 +msgid "performance and bug fixes everywhere!" +msgstr "" + +#: src/changelog/v2.12.md:21 +msgid "11 volunteers made hundreds of individual changes this release" +msgstr "" + +#: src/changelog/v2.12.md:23 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/18?closed=1)" +msgstr "" + +#: src/changelog/v2.11.md:1 +msgid "Version 2.11.3 (2020-06-17)" +msgstr "" + +#: src/changelog/v2.11.md:2 +msgid "Fix out-of-memory errors when importing very large decks" +msgstr "" + +#: src/changelog/v2.11.md:3 +msgid "Fix incorrect out-of-space message on import in Android 4" +msgstr "" + +#: src/changelog/v2.11.md:4 +msgid "Fix crash if card viewer closed quickly after view" +msgstr "" + +#: src/changelog/v2.11.md:5 +msgid "Fix unzip fail on .apkg files >2GB" +msgstr "" + +#: src/changelog/v2.11.md:6 +msgid "Fix crash on edit note in browser multi-select" +msgstr "" + +#: src/changelog/v2.11.md:8 +msgid "Version 2.11.2 (2020-06-10)" +msgstr "" + +#: src/changelog/v2.11.md:9 +msgid "Add santali language" +msgstr "" + +#: src/changelog/v2.11.md:10 +msgid "Fix Hebrew, Indonesian, Tagalog languages" +msgstr "" + +#: src/changelog/v2.11.md:11 +msgid "Improve error reporting around apkg import failures" +msgstr "" + +#: src/changelog/v2.11.md:12 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/24?closed=1)" +msgstr "" + +#: src/changelog/v2.11.md:14 +msgid "Version 2.11.1 (2020-06-08)" +msgstr "" + +#: src/changelog/v2.11.md:15 +msgid "Fix crash in Card Browser multi-select mode" +msgstr "" + +#: src/changelog/v2.11.md:16 +msgid "Fix Custom Steps interval dialog space entry issue" +msgstr "" + +#: src/changelog/v2.11.md:17 +msgid "Fix flags don't export with deck" +msgstr "" + +#: src/changelog/v2.11.md:18 +msgid "Fix AnkiDroid API doesn't handle null model id (Anki Compatibility workaround)" +msgstr "" + +#: src/changelog/v2.11.md:19 +msgid "Fix translation crash in sync dialog in Azerbaijani" +msgstr "" + +#: src/changelog/v2.11.md:20 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/23?closed=1)" +msgstr "" + +#: src/changelog/v2.11.md:22 +msgid "Version 2.11.0 (2020-06-05)" +msgstr "" + +#: src/changelog/v2.11.md:23 +msgid "Android minimum supported version is now 4.1 / Jelly Bean / API16 (AnkiWeb Compatibility)" +msgstr "" + +#: src/changelog/v2.11.md:24 +msgid "Change sibling burying should default to off (Anki Compatibility)" +msgstr "" + +#: src/changelog/v2.11.md:25 +msgid "Change learn cards do not go in filtered decks in v1 sched (Anki Compatibility)" +msgstr "" + +#: src/changelog/v2.11.md:26 +msgid "Add Browser Appearance screen, to edit Card Browser render format (Anki Compatibility)" +msgstr "" + +#: src/changelog/v2.11.md:27 +msgid "Add guidance in Note Editor if no cards will be generated despite full fields" +msgstr "" + +#: src/changelog/v2.11.md:28 +msgid "Add all translations from our crowdin.com translation site" +msgstr "" + +#: src/changelog/v2.11.md:29 +msgid "Add ability to decrease daily limit in custom study (Anki Compatibility)" +msgstr "" + +#: src/changelog/v2.11.md:30 +msgid "Add ability to block gesture handling when tapping hints in Reviewer" +msgstr "" + +#: src/changelog/v2.11.md:31 +msgid "Add create subdeck option in deck list long-press context menu" +msgstr "" + +#: src/changelog/v2.11.md:32 +msgid "Add edit note action in Card Browser multi-select mode" +msgstr "" + +#: src/changelog/v2.11.md:33 +msgid "Add ability to turn off 'Card Browser' system text context menu item" +msgstr "" + +#: src/changelog/v2.11.md:34 +msgid "Add nightMode CSS selector for card HTML (Anki Compatibility)" +msgstr "" + +#: src/changelog/v2.11.md:35 +msgid "Add ability to change just the case of a deck name" +msgstr "" + +#: src/changelog/v2.11.md:36 +msgid "Add page-up/page-down gestures" +msgstr "" + +#: src/changelog/v2.11.md:37 +msgid "Improve gesture handling in full-screen / immersive mode" +msgstr "" + +#: src/changelog/v2.11.md:38 +msgid "Improve handling of cloze deletion in TTS mode" +msgstr "" + +#: src/changelog/v2.11.md:39 +msgid "Improve Card Browser search from Android text selection menu" +msgstr "" + +#: src/changelog/v2.11.md:40 +msgid "Improve Card Browser with default hide of media filenames" +msgstr "" + +#: src/changelog/v2.11.md:41 +msgid "Improve Reviewer auto-advance by waiting for TTS to finish" +msgstr "" + +#: src/changelog/v2.11.md:42 +msgid "Improve transparent SVG display in night mode with white background" +msgstr "" + +#: src/changelog/v2.11.md:43 +msgid "Improve anki package import handling" +msgstr "" + +#: src/changelog/v2.11.md:44 +msgid "Improve AnkiWeb login form enter button handling" +msgstr "" + +#: src/changelog/v2.11.md:45 +msgid "Improve hardware back button handling in restore from backup" +msgstr "" + +#: src/changelog/v2.11.md:46 +msgid "Improve Reviewer display of un-rendered LaTeX" +msgstr "" + +#: src/changelog/v2.11.md:47 +msgid "Improve TTS / auto-answer combination, wait for TTS before advance" +msgstr "" + +#: src/changelog/v2.11.md:48 +msgid "Workaround Firefox open downloaded deck bug" +msgstr "" + +#: src/changelog/v2.11.md:49 +msgid "Workaround crash on Samsung devices with >500 deck reminders" +msgstr "" + +#: src/changelog/v2.11.md:50 +msgid "Fix card template editor mistakenly allowing add template on cloze type" +msgstr "" + +#: src/changelog/v2.11.md:51 +msgid "Fix language change preference" +msgstr "" + +#: src/changelog/v2.11.md:52 +msgid "Fix ability to unbury a deck in deck list" +msgstr "" + +#: src/changelog/v2.11.md:53 +msgid "Fix app bar item flicker during review" +msgstr "" + +#: src/changelog/v2.11.md:54 +msgid "Fix V2 scheduler learning card count after undo" +msgstr "" + +#: src/changelog/v2.11.md:55 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/13?closed=1)" +msgstr "" + +#: src/changelog/v2.10.md:1 +msgid "Version 2.10.4 (2020-05-31)" +msgstr "" + +#: src/changelog/v2.10.md:2 +msgid "Workaround expired AnkiWeb SSL Root certificate" +msgstr "" + +#: src/changelog/v2.10.md:3 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/22?closed=1)" +msgstr "" + +#: src/changelog/v2.10.md:5 +msgid "Version 2.10.3 (2020-05-29)" +msgstr "" + +#: src/changelog/v2.10.md:6 +msgid "Fix crash on no permissions on Card Browser system text menu entry" +msgstr "" + +#: src/changelog/v2.10.md:7 +msgid "Fix crash in widget if external storage unmounts" +msgstr "" + +#: src/changelog/v2.10.md:8 +msgid "Fix crash on device reboot if no permissions" +msgstr "" + +#: src/changelog/v2.10.md:9 +msgid "Fix crash if deck picker background image too large" +msgstr "" + +#: src/changelog/v2.10.md:10 +msgid "Fix crash in tags dialog" +msgstr "" + +#: src/changelog/v2.10.md:11 +msgid "Fix bad data generated for null objects (Anki compatibility)" +msgstr "" + +#: src/changelog/v2.10.md:12 +msgid "[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/21?closed=1)" +msgstr "" + +#: src/changelog/v2.10.md:14 +msgid "Version 2.10.2 (2020-05-14)" +msgstr "" + +#: src/changelog/v2.10.md:15 +msgid "Fix type answer cards not rendering correctly" +msgstr "" + +#: src/changelog/v2.10.md:16 +msgid "Fix type answer card template creation on non-English new installs" +msgstr "" + +#: src/changelog/v2.10.md:17 +msgid "Fix frequent full sync caused by incorrect learning card counts" +msgstr "" + +#: src/changelog/v2.10.md:18 +msgid "Fix crash importing into fresh install with no storage permission" +msgstr "" + +#: src/changelog/v2.10.md:20 +msgid "Version 2.10.1 (2020-05-13)" +msgstr "" + +#: src/changelog/v2.10.md:21 +msgid "Updated all translations from crowdin translators" +msgstr "" + +#: src/changelog/v2.10.md:22 +msgid "Fix crash note editor on rapid back button" +msgstr "" + +#: src/changelog/v2.10.md:23 +msgid "Fix crash from incorrect Thai translation" +msgstr "" + +#: src/changelog/v2.10.md:25 +msgid "Version 2.10 (2020-05-12)" +msgstr "" + +#: src/changelog/v2.10.md:26 +msgid "Add welcome dialog explaining need for storage permission" +msgstr "" + +#: src/changelog/v2.10.md:27 +msgid "Add support for Flags on cards (including flagging by gesture)" +msgstr "" + +#: src/changelog/v2.10.md:28 +msgid "Add ability to set background image in Deck Picker" +msgstr "" + +#: src/changelog/v2.10.md:29 +msgid "Add localization of standard templates created in fresh install" +msgstr "" + +#: src/changelog/v2.10.md:30 +msgid "Add support for card javascript to reload current card programmatically" +msgstr "" + +#: src/changelog/v2.10.md:31 +msgid "Add support for restricted learning / classroom devices" +msgstr "" + +#: src/changelog/v2.10.md:32 +msgid "Add preference to disable \"Extended Text UI\" full-screen editor" +msgstr "" + +#: src/changelog/v2.10.md:33 +msgid "Add CSS style capability to heavy checkmark and down arrow in card" +msgstr "" + +#: src/changelog/v2.10.md:34 +msgid "Add display of current interval on reschedule dialog" +msgstr "" + +#: src/changelog/v2.10.md:35 +msgid "Add support for card javascript to answer cards programmatically" +msgstr "" + +#: src/changelog/v2.10.md:36 +msgid "Add ability to toggle sticky field in field editor" +msgstr "" + +#: src/changelog/v2.10.md:37 +msgid "Improve deck list newline, style, script tag handling in deck descriptions" +msgstr "" + +#: src/changelog/v2.10.md:38 +msgid "Improve whiteboard on/off state handling, especially between day/night mode" +msgstr "" + +#: src/changelog/v2.10.md:39 +msgid "Improve multi-selection options in CardBrowser" +msgstr "" + +#: src/changelog/v2.10.md:40 +msgid "Improve performance (systematic optimization process, lots of improvements!)" +msgstr "" + +#: src/changelog/v2.10.md:41 +msgid "Improve handling of erroneous notes (missing fields, improper clozes)" +msgstr "" + +#: src/changelog/v2.10.md:42 +msgid "Improve user messaging on network connection failures" +msgstr "" + +#: src/changelog/v2.10.md:43 +msgid "Improve counting of suspended/buried cards in advanced statistics" +msgstr "" + +#: src/changelog/v2.10.md:44 +msgid "Improve v2 scheduler compatibility with Anki ecosystem" +msgstr "" + +#: src/changelog/v2.10.md:45 +msgid "Improve handling / detection of full sync need" +msgstr "" + +#: src/changelog/v2.10.md:46 +msgid "Improve Anki compatibility by allowing more field/model/deck name characters" +msgstr "" + +#: src/changelog/v2.10.md:47 +msgid "Improve deck list estimated review times with human scale times" +msgstr "" + +#: src/changelog/v2.10.md:48 +msgid "Fix text scaling bug in card browser" +msgstr "" + +#: src/changelog/v2.10.md:49 +msgid "Fix crash in export while using v2 scheduler" +msgstr "" + +#: src/changelog/v2.10.md:50 +msgid "Fix Custom Tabs crash with non-default system web browser" +msgstr "" + +#: src/changelog/v2.10.md:51 +msgid "Fix issues with import of packages with long Unicode names" +msgstr "" + +#: src/changelog/v2.10.md:52 +msgid "Fix incorrect intervals on lapsed filtered v2 scheduler cards" +msgstr "" + +#: src/changelog/v2.10.md:53 +msgid "Fix multimedia editor save/cancel behavior" +msgstr "" + +#: src/changelog/v2.10.md:54 +msgid "Fix incorrect button/gesture availability while existing task is still active" +msgstr "" + +#: src/changelog/v2.10.md:55 +msgid "Fix type answer crash on invalid characters" +msgstr "" + +#: src/changelog/v2.10.md:56 +msgid "Fix cloze references not being recognized in all fields" +msgstr "" + +#: src/changelog/v2.10.md:57 +msgid "Fix invalid ability to change deck to a filtered deck" +msgstr "" + +#: src/changelog/v2.10.md:58 +msgid "Fix crashes on adding invalid images, audios, and videos" +msgstr "" + +#: src/changelog/v2.10.md:59 +msgid "Fix CardBrowser crash after deleting card" +msgstr "" + +#: src/changelog/v2.10.md:60 +msgid "Fix crash and help user if no browser detected" +msgstr "" + +#: src/changelog/v2.10.md:61 +msgid "Fix Reviewer crash if card not available" +msgstr "" + +#: src/changelog/v2.10.md:62 +msgid "Fix crash / improve import of pasted decks" +msgstr "" + +#: src/changelog/v2.10.md:63 +msgid "Fix clicking hint field blocks key input in Reviewer" +msgstr "" + +#: src/changelog/v2.10.md:64 +msgid "Fix Previewer forgetting which card to show on device rotation" +msgstr "" + +#: src/changelog/v2.10.md:65 +msgid "Fix Mathjax/cloze interactions" +msgstr "" + +#: src/changelog/v2.10.md:66 +msgid "Fix vertical alignment of touch area in full-screen review" +msgstr "" + +#: src/changelog/v2.10.md:67 +msgid "Fix handling of ':::' in deck names" +msgstr "" + +#: src/changelog/v2.10.md:68 +msgid "Fix incorrect display of HTML comments in card browser" +msgstr "" + +#: src/changelog/v2.9.md:1 +msgid "Version 2.9.7 (2020-04-30)" +msgstr "" + +#: src/changelog/v2.9.md:2 +msgid "Fix crash / workaround deck options timer config regression in AnkiDesktop" +msgstr "" + +#: src/changelog/v2.9.md:4 +msgid "Version 2.9.6 (2020-04-03)" +msgstr "" + +#: src/changelog/v2.9.md:5 +msgid "Fix multimedia crashes (permissions handling, image add, preview)" +msgstr "" + +#: src/changelog/v2.9.md:6 +msgid "Fix UI and crashes in database check (user dialog + exception handling)" +msgstr "" + +#: src/changelog/v2.9.md:7 +msgid "Fix Windows 10 image compatibility issue with image paths" +msgstr "" + +#: src/changelog/v2.9.md:8 +msgid "Fix AnkiDesktop sync compatibility issue if more than 1000 cards due" +msgstr "" + +#: src/changelog/v2.9.md:9 +msgid "Fix crash in card browser render" +msgstr "" + +#: src/changelog/v2.9.md:10 +msgid "Fix parsing of image tags in card browser" +msgstr "" + +#: src/changelog/v2.9.md:11 +msgid "Fix crash in StudyOptionsFragment" +msgstr "" + +#: src/changelog/v2.9.md:12 +msgid "Fix issue with deck options group changing on export" +msgstr "" + +#: src/changelog/v2.9.md:13 +msgid "Fix issue with exports containing unexpected media" +msgstr "" + +#: src/changelog/v2.9.md:14 +msgid "Fix issue with dynamic decks (crash fix, export fix)" +msgstr "" + +#: src/changelog/v2.9.md:15 +msgid "Fix high frequency issue \"AnkiDroid directory is inaccessible\"" +msgstr "" + +#: src/changelog/v2.9.md:16 +msgid "Fix high frequency WebView (card viewer) crash" +msgstr "" + +#: src/changelog/v2.9.md:17 +msgid "Add columns to card browser (due, ease, changed, created, edited)" +msgstr "" + +#: src/changelog/v2.9.md:18 +msgid "Fix card scheduler not respecting maximum intervals" +msgstr "" + +#: src/changelog/v2.9.md:19 +msgid "Fix card browser spins forever on images or empty strings" +msgstr "" + +#: src/changelog/v2.9.md:21 +msgid "Version 2.9.5 (2020-03-15)" +msgstr "" + +#: src/changelog/v2.9.md:22 +msgid "Fix crash rendering card list while updating card browser search" +msgstr "" + +#: src/changelog/v2.9.md:23 +msgid "Fix case-sensitivity issue with pronunciation words not being found" +msgstr "" + +#: src/changelog/v2.9.md:24 +msgid "Fix crash caused by auto-sync on startup showing dialog too soon" +msgstr "" + +#: src/changelog/v2.9.md:25 +msgid "Fix crash on preview of TTS cards showing language selectiond dialog too slowly" +msgstr "" + +#: src/changelog/v2.9.md:26 +msgid "Fix crash on import if collection not found" +msgstr "" + +#: src/changelog/v2.9.md:27 +msgid "Fix Anki ecosystem deck configuration issue for Anki Desktop users \\<= 2.16" +msgstr "" + +#: src/changelog/v2.9.md:28 +msgid "Fix crash if user attempts to open camera or gallery and no app is available" +msgstr "" + +#: src/changelog/v2.9.md:29 +msgid "Fix crash building deck reminders while deck is synchronizing" +msgstr "" + +#: src/changelog/v2.9.md:30 +msgid "Fix crash related to audio recording stop" +msgstr "" + +#: src/changelog/v2.9.md:31 +msgid "Show helpful messages if import fails because device is out of space" +msgstr "" + +#: src/changelog/v2.9.md:32 +msgid "Fix crash when taking pictures on devices with Lollipop and older" +msgstr "" + +#: src/changelog/v2.9.md:34 +msgid "Version 2.9.4 (2020-02-18)" +msgstr "" + +#: src/changelog/v2.9.md:35 +msgid "Fix crash when fetching pronunciations in note editor" +msgstr "" + +#: src/changelog/v2.9.md:36 +msgid "Fix issue with pronunciation words not being found" +msgstr "" + +#: src/changelog/v2.9.md:37 +msgid "Fix crash on startup for users with auto-sync on startup" +msgstr "" + +#: src/changelog/v2.9.md:38 +msgid "Fix crash on deck import when app is in background" +msgstr "" + +#: src/changelog/v2.9.md:39 +msgid "Fix crash for users of Google Chrome Canary" +msgstr "" + +#: src/changelog/v2.9.md:40 +msgid "Fix crash when adding certain audio clips" +msgstr "" + +#: src/changelog/v2.9.md:41 +msgid "Fix crash related to fetching Sound metadata" +msgstr "" + +#: src/changelog/v2.9.md:42 +msgid "Fix issue where audio plays twice" +msgstr "" + +#: src/changelog/v2.9.md:44 +msgid "Version 2.9.3 (2020-02-09)" +msgstr "" + +#: src/changelog/v2.9.md:45 +msgid "Fix issues with connection timeouts and new encryption library" +msgstr "" + +#: src/changelog/v2.9.md:46 +msgid "Fix incorrect handling of decks with ':::' in their name" +msgstr "" + +#: src/changelog/v2.9.md:48 +msgid "Version 2.9.2 (2020-02-03)" +msgstr "" + +#: src/changelog/v2.9.md:49 +msgid "Add support for new AnkiWeb encryption changes" +msgstr "" + +#: src/changelog/v2.9.md:50 +msgid "Fix some bugs using filtered decks" +msgstr "" + +#: src/changelog/v2.9.md:51 +msgid "Fix crash on app startup with uninitialized collection" +msgstr "" + +#: src/changelog/v2.9.md:52 +msgid "Fix some issues with new cloze deletion menu" +msgstr "" + +#: src/changelog/v2.9.md:53 +msgid "Fix issue with Mathjax + cloze deletion" +msgstr "" + +#: src/changelog/v2.9.md:54 +msgid "Fix incorrect intervals bug with new scheduler" +msgstr "" + +#: src/changelog/v2.9.md:55 +msgid "Add various patches from Anki Desktop" +msgstr "" + +#: src/changelog/v2.9.md:57 +msgid "Version 2.9.1 (2019-10-16)" +msgstr "" + +#: src/changelog/v2.9.md:58 +msgid "Fix crash reviewing on Android 5 - 7" +msgstr "" + +#: src/changelog/v2.9.md:59 +msgid "Fix crash on Hungarian translation" +msgstr "" + +#: src/changelog/v2.9.md:61 +msgid "Version 2.9 (2019-10-14)" +msgstr "" + +#: src/changelog/v2.9.md:62 +msgid "Change to new adaptive icon" +msgstr "" + +#: src/changelog/v2.9.md:63 +msgid "Add multi-select in the card browser (delete, change deck, reschedule)" +msgstr "" + +#: src/changelog/v2.9.md:64 +msgid "Add support for new Anki 2.1 scheduler" +msgstr "" + +#: src/changelog/v2.9.md:65 +msgid "Add support for Mathjax" +msgstr "" + +#: src/changelog/v2.9.md:66 +msgid "Add ability to add local audio files to notes" +msgstr "" + +#: src/changelog/v2.9.md:67 +msgid "Add ability to specify filename and folder on export and import" +msgstr "" + +#: src/changelog/v2.9.md:68 +msgid "Add ability to insert cloze in Note Editor" +msgstr "" + +#: src/changelog/v2.9.md:69 +msgid "Add ability to reposition cards " +msgstr "" + +#: src/changelog/v2.9.md:70 +msgid "Add ability to use due reminders for specific decks" +msgstr "" + +#: src/changelog/v2.9.md:71 +msgid "Add support for gamepad input when reviewing" +msgstr "" + +#: src/changelog/v2.9.md:72 +msgid "Add support for common keyboard shortcuts from Anki Desktop" +msgstr "" + +#: src/changelog/v2.9.md:73 +msgid "Add ability to search in Card Browser for text from system context menu" +msgstr "" + +#: src/changelog/v2.9.md:74 +msgid "Add ability to recognize tts HTML elements in questions and answers" +msgstr "" + +#: src/changelog/v2.9.md:75 +msgid "Add ability to display LaTeX rendered to SVG (vs PNG) from Anki Desktop" +msgstr "" + +#: src/changelog/v2.9.md:76 +msgid "Add confirmation check for full sync trigger in preferences" +msgstr "" + +#: src/changelog/v2.9.md:77 +msgid "Fix excessive pull-to-sync false positives. Disable when not at top of page." +msgstr "" + +#: src/changelog/v2.9.md:78 +msgid "Fix some issues with focus in Note Editor" +msgstr "" + +#: src/changelog/v2.9.md:79 +msgid "Fix media sync errors related to file creation issues" +msgstr "" + +#: src/changelog/v2.9.md:80 +msgid "Fix crash related to use of camera without permission or no camera hardware " +msgstr "" + +#: src/changelog/v2.9.md:81 +msgid "Fix crash related to Card Browser allowing preview with no cards selected" +msgstr "" + +#: src/changelog/v2.9.md:82 +msgid "Fix crash in Reviewer when collection inaccessible" +msgstr "" + +#: src/changelog/v2.9.md:83 +msgid "Fix crash related to TTS when TTS not initialized" +msgstr "" + +#: src/changelog/v2.9.md:84 +msgid "Fix crash related to sdcard mount/unmount on inaccessible collection" +msgstr "" + +#: src/changelog/v2.9.md:85 +msgid "Fix crash related to audio button being visible after loading pronunciation media" +msgstr "" + +#: src/changelog/v2.9.md:86 +msgid "Fix crash when attempting to import invalid zip files " +msgstr "" + +#: src/changelog/v2.9.md:87 +msgid "Fix crash related to switching from split-window mode to single-window mode" +msgstr "" + +#: src/changelog/v2.9.md:88 +msgid "Fix crash related to missing preferences in Preference editor" +msgstr "" + +#: src/changelog/v2.9.md:89 +msgid "Fix crash on deck selection after deleting a deck and immediately closing app" +msgstr "" + +#: src/changelog/v2.9.md:90 +msgid "Fix crash in Reviewer when non-standard browser installed" +msgstr "" + +#: src/changelog/v2.9.md:91 +msgid "Fix type-answer field showing unexpectedly after undo in Reviewer" +msgstr "" + +#: src/changelog/v2.9.md:92 +msgid "Fix incorrect display of some characters when using type-answer" +msgstr "" + +#: src/changelog/v2.9.md:93 +msgid "Fix error related to media in subfolders not showing in Reviewer" +msgstr "" + +#: src/changelog/v2.9.md:94 +msgid "Fix some issues with generated flashcard html and CSS selectors" +msgstr "" + +#: src/changelog/v2.9.md:95 +msgid "Fix some Glosbe and Beolingus regressions" +msgstr "" + +#: src/changelog/v2.9.md:96 +msgid "Fix issue where new deck was created when note type was renamed" +msgstr "" + +#: src/changelog/v2.9.md:97 +msgid "Fix add note button disappearing from Card Browser when returning from search" +msgstr "" + +#: src/changelog/v2.9.md:98 +msgid "Fix some statistics display issues " +msgstr "" + +#: src/changelog/v2.9.md:99 +msgid "Fix incorrect display of some preferences" +msgstr "" + +#: src/changelog/v2.9.md:100 +msgid "Fix invisible notification bar in NoteEditor" +msgstr "" + +#: src/changelog/v2.9.md:101 +msgid "Fix newline characters not working in cloze deletions" +msgstr "" + +#: src/changelog/v2.9.md:102 +msgid "Increase max card count display from 1000 to 99999" +msgstr "" + +#: src/changelog/v2.9.md:103 +msgid "Improve display handling of very long review intervals (> 68 years)" +msgstr "" + +#: src/changelog/v2.9.md:104 +msgid "Improve next/back buttons when using Previewer on multiple cards" +msgstr "" + +#: src/changelog/v2.9.md:105 +msgid "Improve handling of selected deck between statistics, card browser and deck picker" +msgstr "" + +#: src/changelog/v2.9.md:106 +msgid "Improve Card Browser search by restoring when returning from other activities" +msgstr "" + +#: src/changelog/v2.9.md:107 +msgid "Improve card focus handling when moving between Note Editor and Card Template Editor" +msgstr "" + +#: src/changelog/v2.9.md:108 +msgid "Improve labeling of deck-group vs deck-specific options" +msgstr "" + +#: src/changelog/v2.9.md:109 +msgid "Improve formatting of HTTP error codes during sync" +msgstr "" + +#: src/changelog/v2.9.md:110 +msgid "Improve handling of multi-touch events while whiteboard displayed" +msgstr "" + +#: src/changelog/v2.9.md:111 +msgid "Improve permission dialog descriptions" +msgstr "" + +#: src/changelog/v2.9.md:112 +msgid "Improve handling of \"preview new cards\" setting when creating custom study deck" +msgstr "" + +#: src/changelog/v2.9.md:113 +msgid "Improve Navigation Drawer performance on older devices" +msgstr "" + +#: src/changelog/v2.9.md:114 +msgid "Improve database check dialog with addition progress updates during check" +msgstr "" + +#: src/changelog/v2.9.md:115 +msgid "Use different notification channels for study reminders and general notifications" +msgstr "" + +#: src/changelog/v2.9.md:116 +msgid "Drop support for Android \\< Ice Cream Sandwich MR1 (API15, Android 4.0.3)" +msgstr "" + +#: src/changelog/v2.9.md:117 +msgid "Add support for more features on Chromebook (import, export, restore backup, camera)" +msgstr "" + +#: src/changelog/v2.9.md:118 +msgid "Add API support for card/note bury and suspend" +msgstr "" + +#: src/changelog/v2.9.md:119 +msgid "Add API to open Reviewer on specific decks from other apps" +msgstr "" + +#: src/changelog/v2.9.md:120 +msgid "Add support for HTML/Javascript debugging" +msgstr "" + +#: src/changelog/v2.9.md:121 +msgid "Add link to third party apps which support AnkiDroid API in advanced preferences" +msgstr "" + +#: src/changelog/v2.9.md:122 +msgid "Fix issue with custom sync server certificates" +msgstr "" + +#: src/changelog/v2.9.md:123 +msgid "Perform basic DB integrity check on app upgrade" +msgstr "" + +#: src/changelog/v2.9.md:124 +msgid "Introduce optional analytics reporting" +msgstr "" + +#: src/changelog/v2.8.md:1 +msgid "Version 2.8.4 (2018-04-27)" +msgstr "" + +#: src/changelog/v2.8.md:2 +msgid "Fix error syncing due to too many card templates" +msgstr "" + +#: src/changelog/v2.8.md:4 +msgid "Version 2.8.3 (2017-11-10)" +msgstr "" + +#: src/changelog/v2.8.md:5 +msgid "Fix crash adding a picture from camera" +msgstr "" + +#: src/changelog/v2.8.md:6 +msgid "Fix add note icon disappearing in browser after search" +msgstr "" + +#: src/changelog/v2.8.md:7 +msgid "Fix translations from Glosbe" +msgstr "" + +#: src/changelog/v2.8.md:8 +msgid "Fix crash long-tapping when no deck is selected" +msgstr "" + +#: src/changelog/v2.8.md:9 +msgid "Fix crash entering advanced settings on some devices" +msgstr "" + +#: src/changelog/v2.8.md:10 +msgid "Fix incorrect graph display in statistics" +msgstr "" + +#: src/changelog/v2.8.md:11 +msgid "Fix deck not changing properly in statistics" +msgstr "" + +#: src/changelog/v2.8.md:12 +msgid "Fix rounding error in statistics weekly breakdown" +msgstr "" + +#: src/changelog/v2.8.md:13 +msgid "Fix spurious new deck created on model rename" +msgstr "" + +#: src/changelog/v2.8.md:14 +msgid "Improve error message on exception during media sync" +msgstr "" + +#: src/changelog/v2.8.md:15 +msgid "Improve animation when transitioning between screens" +msgstr "" + +#: src/changelog/v2.8.md:16 +msgid "Use a round icon on devices that support it" +msgstr "" + +#: src/changelog/v2.8.md:18 +msgid "Version 2.8.2 (2017-02-28)" +msgstr "" + +#: src/changelog/v2.8.md:19 +msgid "Fix bugs showing confirmation dialogs in various places" +msgstr "" + +#: src/changelog/v2.8.md:20 +msgid "Fix uncommon crash showing dialog after sync" +msgstr "" + +#: src/changelog/v2.8.md:22 +msgid "Version 2.8.1 (2017-02-06)" +msgstr "" + +#: src/changelog/v2.8.md:23 +msgid "Allow sending exported apkg to arbitrary app (e.g. Google Drive)" +msgstr "" + +#: src/changelog/v2.8.md:24 +msgid "Allow AnkiWeb to display a warning on sync completion" +msgstr "" + +#: src/changelog/v2.8.md:25 +msgid "Fix potential full-sync after sync cancellation" +msgstr "" + +#: src/changelog/v2.8.md:26 +msgid "Fix media sync sometimes scanning all files again" +msgstr "" + +#: src/changelog/v2.8.md:27 +msgid "Fix removing $ character when importing media files" +msgstr "" + +#: src/changelog/v2.8.md:28 +msgid "Improve automatic card answer timing when audio is played" +msgstr "" + +#: src/changelog/v2.8.md:29 +msgid "Improve rendering of some statistics" +msgstr "" + +#: src/changelog/v2.8.md:30 +msgid "Fix some crashes in the Russian, Vietnamese, and Chinese translations" +msgstr "" + +#: src/changelog/v2.8.md:31 +msgid "Fix crash sending exported apkg by email. NB: Export path can no longer be modified." +msgstr "" + +#: src/changelog/v2.7.md:1 +msgid "Version 2.7 (2016-10-16)" +msgstr "" + +#: src/changelog/v2.7.md:2 +msgid "Add pull-to-sync feature" +msgstr "" + +#: src/changelog/v2.7.md:3 +msgid "Add option to place answer buttons at the top" +msgstr "" + +#: src/changelog/v2.7.md:4 +msgid "Add widget to directly access \"Add note\" screen" +msgstr "" + +#: src/changelog/v2.7.md:5 +msgid "Fix issue with importing whole collections and restoring backups" +msgstr "" + +#: src/changelog/v2.7.md:6 +msgid "Fix deck import failing after the first successful one" +msgstr "" + +#: src/changelog/v2.7.md:7 +msgid "Fix cards in learning queue not being randomized" +msgstr "" + +#: src/changelog/v2.7.md:8 +msgid "Fix crash with fullscreen mode and hidden answer buttons" +msgstr "" + +#: src/changelog/v2.7.md:9 +msgid "Fix rare crash when opening deck options" +msgstr "" + +#: src/changelog/v2.7.md:10 +msgid "Improve support with TalkBack" +msgstr "" + +#: src/changelog/v2.6.md:1 +msgid "Version 2.6.1 (2016-07-08)" +msgstr "" + +#: src/changelog/v2.6.md:2 +msgid "Add card cycling in previewer (similar to desktop client)" +msgstr "" + +#: src/changelog/v2.6.md:3 +msgid "Add option to hide 'minutes left' in reviewer" +msgstr "" + +#: src/changelog/v2.6.md:4 +msgid "Fix language from app setting not always being used" +msgstr "" + +#: src/changelog/v2.6.md:5 +msgid "Fix not being able to play back new sound recording" +msgstr "" + +#: src/changelog/v2.6.md:6 +msgid "Fix potential crash on Android 2.3 (Gingerbread)" +msgstr "" + +#: src/changelog/v2.6.md:7 +msgid "Improved use of horizontal space when resizing large images" +msgstr "" + +#: src/changelog/v2.6.md:8 +msgid "Minor adjustment to black theme colors" +msgstr "" + +#: src/changelog/v2.6.md:10 +msgid "Version 2.6 (2016-06-14)" +msgstr "" + +#: src/changelog/v2.6.md:11 +msgid "Add two new themes (black, plain), selectable in preferences" +msgstr "" + +#: src/changelog/v2.6.md:12 +msgid "Make reviewer app bar icons customizable" +msgstr "" + +#: src/changelog/v2.6.md:13 +msgid "Split \"hide / delete\" menu in reviewer into \"bury\", \"suspend\", \"delete note\"" +msgstr "" + +#: src/changelog/v2.6.md:14 +msgid "Reviewer undo button now removes last stroke when whiteboard in use" +msgstr "" + +#: src/changelog/v2.6.md:15 +msgid "Add menu entry to change TTS language from reviewer" +msgstr "" + +#: src/changelog/v2.6.md:16 +msgid "Add more of the statistics available on the desktop client" +msgstr "" + +#: src/changelog/v2.6.md:17 +msgid "Add \"advanced statistics\" plugin (must be enabled in advanced settings)" +msgstr "" + +#: src/changelog/v2.6.md:18 +msgid "Add setting to configure custom sync server (advanced)" +msgstr "" + +#: src/changelog/v2.6.md:19 +msgid "Fix card templates created in AnkiDroid incorrectly using bold style" +msgstr "" + +#: src/changelog/v2.6.md:20 +msgid "Fix many importing issues (behavior now consistent with the desktop client)" +msgstr "" + +#: src/changelog/v2.6.md:21 +msgid "Fix long-tapping card in browser not always working" +msgstr "" + +#: src/changelog/v2.6.md:22 +msgid "Update sound playback button image" +msgstr "" + +#: src/changelog/v2.6.md:23 +msgid "Reduce size of whiteboard and gesture area for better interoperability with full screen" +msgstr "" + +#: src/changelog/v2.6.md:24 +msgid "Improve error messages with inaccessible collections" +msgstr "" + +#: src/changelog/v2.6.md:25 +msgid "Allow auto-play of HTML media elements (for templates that enable it)" +msgstr "" + +#: src/changelog/v2.6.md:26 +msgid "Significant updates to the content provider and API (for developers; see documentation)" +msgstr "" + +#: src/changelog/v2.6.md:27 +msgid "Many small bug fixes, improvements, theme adjustments, translation updates" +msgstr "" + +#: src/changelog/v2.5.md:1 +msgid "Version 2.5.4 (2015-12-14)" +msgstr "" + +#: src/changelog/v2.5.md:2 +msgid "Fix background color in overflow menu of deck picker" +msgstr "" + +#: src/changelog/v2.5.md:4 +msgid "Version 2.5.3 (2015-12-14)" +msgstr "" + +#: src/changelog/v2.5.md:5 +msgid "Fix floating action button (blue +) interfering with deck list on Android 2.3" +msgstr "" + +#: src/changelog/v2.5.md:6 +msgid "Fix opening apkg files from Gmail" +msgstr "" + +#: src/changelog/v2.5.md:7 +msgid "Fix automatic playback of consecutive videos" +msgstr "" + +#: src/changelog/v2.5.md:8 +msgid "Add a new launch screen" +msgstr "" + +#: src/changelog/v2.5.md:9 +msgid "Improve behaviour surrounding the deck overview screen" +msgstr "" + +#: src/changelog/v2.5.md:10 +msgid "Multiple media files can now be added to one field in the note editor" +msgstr "" + +#: src/changelog/v2.5.md:11 +msgid "Don't include unused media files on export" +msgstr "" + +#: src/changelog/v2.5.md:12 +msgid "Undo behaviour is now consistent with the desktop client (can no longer undo note edits)" +msgstr "" + +#: src/changelog/v2.5.md:13 +msgid "Enhancements to sync canceling" +msgstr "" + +#: src/changelog/v2.5.md:14 +msgid "Minor performance enhancements, crash fixes, and UI tweaks" +msgstr "" + +#: src/changelog/v2.5.md:16 +msgid "Version 2.5.2 (2015-12-04)" +msgstr "" + +#: src/changelog/v2.5.md:17 +msgid "Fix start-up crashes on Samsung devices running Android 4.2" +msgstr "" + +#: src/changelog/v2.5.md:18 +msgid "Fix crash for new users on Android 6.0" +msgstr "" + +#: src/changelog/v2.5.md:19 +msgid "Reverted to old typing method. The new method is now an option which is off by default." +msgstr "" + +#: src/changelog/v2.5.md:20 +msgid "You can now click on the numbers in the right-most part of the deck list to open the deck overview screen" +msgstr "" + +#: src/changelog/v2.5.md:21 +msgid "Various fixes to transition animations and progress bars" +msgstr "" + +#: src/changelog/v2.5.md:22 +msgid "Add option to remove empty cards (previously only possible on desktop)" +msgstr "" + +#: src/changelog/v2.5.md:23 +msgid "Remove: Google Translate filter. In practice, this feature had no effect and is not required" +msgstr "" + +#: src/changelog/v2.5.md:24 +msgid "Remove: Google image search for multimedia card. The image search API has been discontinued by Google and no longer works" +msgstr "" + +#: src/changelog/v2.5.md:26 +msgid "Version 2.5.1 (2015-12-01)" +msgstr "" + +#: src/changelog/v2.5.md:27 +msgid "Fix crash when loading deck list (could not open collection bug)" +msgstr "" + +#: src/changelog/v2.5.md:28 +msgid "Fix visible progress bar showing when answering card" +msgstr "" + +#: src/changelog/v2.5.md:30 +msgid "Version 2.5 (2015-11-30)" +msgstr "" + +#: src/changelog/v2.5.md:31 +msgid "Redesign of user interface to use material design" +msgstr "" + +#: src/changelog/v2.5.md:32 +msgid "Add new dark theme" +msgstr "" + +#: src/changelog/v2.5.md:33 +msgid "Simplify the study process by bypassing deck overview screen" +msgstr "" + +#: src/changelog/v2.5.md:34 +msgid "Add ability to add, edit, delete note types" +msgstr "" + +#: src/changelog/v2.5.md:35 +msgid "Add setting to enable auto-sync and a Tasker intent to trigger sync" +msgstr "" + +#: src/changelog/v2.5.md:36 +msgid "Replace \"instant add\" feature with new API for 3rd party apps to add cards directly to AnkiDroid" +msgstr "" + +#: src/changelog/v2.5.md:37 +msgid "\"Type in the answer\" input box now built into the card html itself" +msgstr "" + +#: src/changelog/v2.5.md:38 +msgid "Make fullscreen-mode immersive and added setting to hide answer buttons when using gestures" +msgstr "" + +#: src/changelog/v2.5.md:39 +msgid "Add css class for customizing card background color when night mode is enabled" +msgstr "" + +#: src/changelog/v2.5.md:40 +msgid "Allow changing media volume from the deck picker" +msgstr "" + +#: src/changelog/v2.5.md:41 +msgid "Add ability to save and view common searches in the card browser" +msgstr "" + +#: src/changelog/v2.5.md:42 +msgid "Browser now shows full question and answer in the results by default" +msgstr "" + +#: src/changelog/v2.5.md:43 +msgid "Only show tags relevant to that deck when doing custom study by tag" +msgstr "" + +#: src/changelog/v2.5.md:44 +msgid "Fix some bugs in the widget" +msgstr "" + +#: src/changelog/v2.5.md:45 +msgid "Remove \"simple interface\"" +msgstr "" + +#: src/changelog/v2.5.md:46 +msgid "Remove support for Android version 2.1 and 2.2 (minimum is now 2.3.3)" +msgstr "" + +#: src/changelog/v2.5.md:47 +msgid "Add support for Android 6 Marshmallow" +msgstr "" + +#: src/changelog/v2.5.md:48 +msgid "Disable write-ahead-logging in sqlite database" +msgstr "" + +#: src/changelog/v2.5.md:49 +msgid "Many other bug fixes and small improvements" +msgstr "" + +#: src/changelog/v2.4.md:1 +msgid "Version 2.4.4 (2015-10-20)" +msgstr "" + +#: src/changelog/v2.4.md:2 +msgid "Fix playback of sound files with apostrophes in file name" +msgstr "" + +#: src/changelog/v2.4.md:3 +msgid "Fix new card siblings not being buried for the same day" +msgstr "" + +#: src/changelog/v2.4.md:4 +msgid "Fix media on cards when using the Hebrew Fix option" +msgstr "" + +#: src/changelog/v2.4.md:5 +msgid "Fix crashes related to \"Relative overdueness\" and make this sort order available on AnkiDroid" +msgstr "" + +#: src/changelog/v2.4.md:6 +msgid "When mixing new and review cards, make their rotation more consistent with desktop" +msgstr "" + +#: src/changelog/v2.4.md:8 +msgid "Version 2.4.3 (2015-04-21)" +msgstr "" + +#: src/changelog/v2.4.md:9 +msgid "Fix \"unknown field\" bug" +msgstr "" + +#: src/changelog/v2.4.md:10 +msgid "Fix crash showing welcome screen on Android 2.3" +msgstr "" + +#: src/changelog/v2.4.md:11 +msgid "Fix crash caused by widget" +msgstr "" + +#: src/changelog/v2.4.md:12 +msgid "Fix rare crash in browser" +msgstr "" + +#: src/changelog/v2.4.md:13 +msgid "Fix a couple of sync issues" +msgstr "" + +#: src/changelog/v2.4.md:14 +msgid "Fix crash starting AnkiDroid on a small number of devices" +msgstr "" + +#: src/changelog/v2.4.md:15 src/changelog/v2.4.md:29 +msgid "Update translations" +msgstr "" + +#: src/changelog/v2.4.md:17 +msgid "Version 2.4.2 (2015-03-18)" +msgstr "" + +#: src/changelog/v2.4.md:18 +msgid "Fix some bugs with cloze templates" +msgstr "" + +#: src/changelog/v2.4.md:19 +msgid "Fix a translation error" +msgstr "" + +#: src/changelog/v2.4.md:21 +msgid "Version 2.4.1 (2015-03-15)" +msgstr "" + +#: src/changelog/v2.4.md:22 +msgid "Fix some bugs with filtered decks" +msgstr "" + +#: src/changelog/v2.4.md:23 +msgid "Improve importing of shared decks" +msgstr "" + +#: src/changelog/v2.4.md:24 +msgid "Open settings if AnkiDroid dir inaccessible" +msgstr "" + +#: src/changelog/v2.4.md:25 +msgid "Fix a bug with zooming" +msgstr "" + +#: src/changelog/v2.4.md:26 +msgid "Fix a bug where old card was still shown in reviewer after changing deck" +msgstr "" + +#: src/changelog/v2.4.md:27 +msgid "Fix some issues with cloze deletion" +msgstr "" + +#: src/changelog/v2.4.md:28 +msgid "Fix various crashes" +msgstr "" + +#: src/changelog/v2.4.md:31 +msgid "Version 2.4 (2015-01-28)" +msgstr "" + +#: src/changelog/v2.4.md:32 +msgid "Move \"preview\" feature to browser" +msgstr "" + +#: src/changelog/v2.4.md:33 +msgid "Add ability to change note type of existing flashcards" +msgstr "" + +#: src/changelog/v2.4.md:34 +msgid "Add ability to view and delete card templates" +msgstr "" + +#: src/changelog/v2.4.md:35 +msgid "Fix TTS for most devices" +msgstr "" + +#: src/changelog/v2.4.md:36 +msgid "Support playback of videos (see supported formats [here](http://developer.android.com/guide/appendix/media-formats.html))" +msgstr "" + +#: src/changelog/v2.4.md:37 +msgid "Improve rendering of second column in browser" +msgstr "" + +#: src/changelog/v2.4.md:38 +msgid "Improve detection of swipe gestures" +msgstr "" + +#: src/changelog/v2.4.md:39 +msgid "Increase number of languages in Glosbe translator" +msgstr "" + +#: src/changelog/v2.4.md:40 +msgid "Add support for Chromebooks" +msgstr "" + +#: src/changelog/v2.4.md:41 +msgid "New crash report system" +msgstr "" + +#: src/changelog/v2.4.md:42 +msgid "Bug fixes" +msgstr "" + +#: src/changelog/v2.3.md:1 +msgid "Version 2.3.2 (2014-11-06)" +msgstr "" + +#: src/changelog/v2.3.md:2 +msgid "Bug fixes: Sync, TTS, Remote images, Advanced editor, Export" +msgstr "" + +#: src/changelog/v2.3.md:3 +msgid "Note: This is the last version of AnkiDroid supported by AnkiWeb. Previous versions will not sync." +msgstr "" + +#: src/changelog/v2.3.md:5 +msgid "Version 2.3 (2014-10-27)" +msgstr "" + +#: src/changelog/v2.3.md:6 +msgid "Add new user manual" +msgstr "" + +#: src/changelog/v2.3.md:7 +msgid "Make statistics identical to Anki Desktop" +msgstr "" + +#: src/changelog/v2.3.md:8 +msgid "Fixes to media sync" +msgstr "" + +#: src/changelog/v2.3.md:9 +msgid "Fix bug where images were not showing" +msgstr "" + +#: src/changelog/v2.3.md:10 +msgid "Change layout of note editor" +msgstr "" + +#: src/changelog/v2.3.md:11 +msgid "Add new disable whiteboard option to reviewer and update icons" +msgstr "" + +#: src/changelog/v2.3.md:12 +msgid "Add full support for APKG export and import" +msgstr "" + +#: src/changelog/v2.3.md:13 +msgid "Add feature to email exported APKG" +msgstr "" + +#: src/changelog/v2.3.md:14 +msgid "Increase default number of backups and use APKG" +msgstr "" + +#: src/changelog/v2.3.md:15 +msgid "Make preview card accessible from card browser" +msgstr "" + +#: src/changelog/v2.3.md:16 +msgid "Make shared decks download with Android browser" +msgstr "" + +#: src/changelog/v2.3.md:17 +msgid "Add reset and reschedule feature in note editor" +msgstr "" + +#: src/changelog/v2.3.md:18 +msgid "Add a new notification system and icon" +msgstr "" + +#: src/changelog/v2.3.md:19 +msgid "Replace tutorial deck with new welcome screen" +msgstr "" + +#: src/changelog/v2.3.md:20 +msgid "Disable opening navigation drawer from reviewer when swipe is used" +msgstr "" + +#: src/changelog/v2.3.md:21 +msgid "Improve audio recording quality" +msgstr "" + +#: src/changelog/v2.3.md:22 +msgid "Support sticky fields when enabled in Anki Desktop" +msgstr "" + +#: src/changelog/v2.3.md:23 +msgid "Many other bug fixes" +msgstr "" + +#: src/changelog/v2.2.md:1 +msgid "Version 2.2.3 (2014-08-04)" +msgstr "" + +#: src/changelog/v2.2.md:2 +msgid "New media sync protocol" +msgstr "" + +#: src/changelog/v2.2.md:3 +msgid "Fix 2 bugs for opening links and resuming the app" +msgstr "" + +#: src/changelog/v2.2.md:5 +msgid "Version 2.2 (2014-07-21)" +msgstr "" + +#: src/changelog/v2.2.md:6 +msgid "Redesign layout" +msgstr "" + +#: src/changelog/v2.2.md:7 +msgid "Add pictures and sounds to flashcards (experimental)" +msgstr "" + +#: src/changelog/v2.2.md:8 +msgid "Make second column in card browser configurable" +msgstr "" + +#: src/changelog/v2.2.md:9 +msgid "Make images on flashcards zoomable" +msgstr "" + +#: src/changelog/v2.2.md:10 +msgid "Improve preview feature and access via action bar" +msgstr "" + +#: src/changelog/v2.2.md:11 +msgid "Simplify menus and settings" +msgstr "" + +#: src/changelog/v2.2.md:12 +msgid "Make slow searches in card browser cancellable" +msgstr "" + +#: src/changelog/v2.2.md:13 +msgid "Improve adding/removing tags" +msgstr "" + +#: src/changelog/v2.2.md:14 +msgid "Fix \"type in the answer\" and cloze deletion features" +msgstr "" + +#: src/changelog/v2.2.md:15 +msgid "Fix whiteboard feature" +msgstr "" + +#: src/changelog/v2.2.md:16 +msgid "Restore backups from within the app" +msgstr "" + +#: src/changelog/v2.2.md:17 +msgid "Make volume duck on any background music when sounds played" +msgstr "" + +#: src/changelog/v2.2.md:18 +msgid "Make playing of sounds consistent with Desktop version" +msgstr "" + +#: src/changelog/v2.2.md:19 +msgid "Remove animations feature due to being buggy" +msgstr "" + +#: src/changelog/v2.2.md:20 +msgid "Improve speed of showing cards" +msgstr "" + +#: src/changelog/v2.2.md:21 +msgid "Remove duplicate check dialog when adding new flashcards" +msgstr "" + +#: src/changelog/v2.2.md:22 +msgid "Remove swap button when adding or editing flashcards" +msgstr "" + +#: src/changelog/v2.2.md:23 +msgid "Remove kanji info feature (will become optional plugin in the future)" +msgstr "" + +#: src/changelog/v2.2.md:24 +msgid "Make minimum Android version 2.1" +msgstr "" + +#: src/changelog/v2.2.md:25 +msgid "Fix lots of bugs" +msgstr "" + +#: src/changelog/v2.1.md:1 +msgid "Version 2.1.3 (2014-04-05)" +msgstr "" + +#: src/changelog/v2.1.md:2 +msgid "Create new notes in correct deck" +msgstr "" + +#: src/changelog/v2.1.md:3 +msgid "TTS fixes" +msgstr "" + +#: src/changelog/v2.1.md:5 +msgid "Version 2.1 (2014-03-27)" +msgstr "" + +#: src/changelog/v2.1.md:6 +msgid "Lots of Bug Fixes" +msgstr "" + +#: src/changelog/v2.1.md:7 +msgid "New custom study option with improved tag selection" +msgstr "" + +#: src/changelog/v2.1.md:8 +msgid "New preview card feature in note editor (experimental)" +msgstr "" + +#: src/changelog/v2.1.md:9 +msgid "New override font preference in addition to default font" +msgstr "" + +#: src/changelog/v2.1.md:10 +msgid "New \"Kanji Info\" feature (enabled in preferences->reviewing->Kanji Info)" +msgstr "" + +#: src/changelog/v2.1.md:11 +msgid "Improve Aedict integration" +msgstr "" + +#: src/changelog/v2.1.md:12 +msgid "Support for Samsung Multi-Window" +msgstr "" + +#: src/changelog/v2.1.md:13 +msgid "Fix Some TTS Issues" +msgstr "" + +#: src/changelog/v2.1.md:14 +msgid "Updated Translations" +msgstr "" + +#: src/changelog/v2.1.md:15 +msgid "Remove unused media check when deleting decks" +msgstr "" + +#: src/changelog/v2.1.md:16 +msgid "Significantly increase speed for reducing filtered decks" +msgstr "" + +#: src/changelog/v2.1.md:17 +msgid "Remove upgrade wizard" +msgstr "" + +#: src/changelog/v2.0.md:1 +msgid "Version 2.0.4 (2014-02-03)" +msgstr "" + +#: src/changelog/v2.0.md:2 +msgid "Fix issue with typing answers" +msgstr "" + +#: src/changelog/v2.0.md:3 +msgid "Default font now overrides card font" +msgstr "" + +#: src/changelog/v2.0.md:4 +msgid "Fixed audio playback image being covered by text on Android 2.3" +msgstr "" + +#: src/changelog/v2.0.md:5 +msgid "Fixed reviewer crash when language set to Romanian" +msgstr "" + +#: src/changelog/v2.0.md:6 +msgid "Translation fixes" +msgstr "" + +#: src/changelog/v2.0.md:8 +msgid "Version 2.0.2 (2013-12-15)" +msgstr "" + +#: src/changelog/v2.0.md:9 +msgid "Fixed lots of crashes" +msgstr "" + +#: src/changelog/v2.0.md:10 +msgid "Tablet UI fixes" +msgstr "" + +#: src/changelog/v2.0.md:11 +msgid "Fixed new card ordering issues" +msgstr "" + +#: src/changelog/v2.0.md:12 +msgid "Card appearance now matches desktop Anki. (Centering cards is off by default but can be re-enabled)" +msgstr "" + +#: src/changelog/v2.0.md:13 +msgid "Option groups can now be changed in AnkiDroid" +msgstr "" + +#: src/changelog/v2.0.md:14 +msgid "Clear error message when using a bad template" +msgstr "" + +#: src/changelog/v2.0.md:15 +msgid "Fixed timeboxing notifications" +msgstr "" + +#: src/changelog/v2.0.md:16 +msgid "Properly scale images" +msgstr "" + +#: src/changelog/v2.0.md:17 +msgid "Better custom font handling" +msgstr "" + +#: src/changelog/v2.0.md:18 +msgid "More settings (next day starts at, timeboxing value, etc.)" +msgstr "" + +#: src/changelog/v2.0.md:19 +msgid "Changing AnkiDroid interface language now works." +msgstr "" + +#: src/changelog/v2.0.md:20 +msgid "Fixed import/shared deck download issues (\"not a valid apkg file\")" +msgstr "" + +#: src/changelog/v2.0.md:21 +msgid "Fixed invisible text on Motorola devices" +msgstr "" + +#: src/changelog/v2.0.md:22 +msgid "Focus on answer when revealed" +msgstr "" + +#: src/changelog/v2.0.md:23 +msgid "Filtered decks are now blue in deck list" +msgstr "" + +#: src/changelog/v2.0.md:24 +msgid "Removed unused circle button in note editor" +msgstr "" + +#: src/changelog/v2.0.md:26 +msgid "Version 2.0.1 (2013-02-06)" +msgstr "" + +#: src/changelog/v2.0.md:27 +msgid "Upgrade wizard" +msgstr "" + +#: src/changelog/v2.0.md:28 +msgid "Fix importing apkgs" +msgstr "" + +#: src/changelog/v2.0.md:29 +msgid "Fix media syncing" +msgstr "" + +#: src/changelog/v2.0.md:31 +msgid "Version 2.0 (2013-01-03)" +msgstr "" + +#: src/changelog/v2.0.md:32 +msgid "complete revision" +msgstr "" + +#: src/changelog/v2.0.md:33 +msgid "libanki2.0 scheduling" +msgstr "" + +#: src/changelog/v2.0.md:34 +msgid "new learning mode" +msgstr "" + +#: src/changelog/v2.0.md:35 +msgid "new layout" +msgstr "" + +#: src/changelog/v2.0.md:36 +msgid "merge syncing possible now" +msgstr "" + +#: src/changelog/v2.0.md:37 +msgid "better statistics" +msgstr "" + +#: src/changelog/v2.0.md:38 +msgid "decks are now saved in a single collection" +msgstr "" + +#: src/changelog/v2.0.md:39 +msgid "options are shareable now" +msgstr "" + +#: src/changelog/v2.0.md:40 +msgid "tablet layout" +msgstr "" + +#: src/changelog/v2.0.md:41 +msgid "tons of performance improvements" +msgstr "" + +#: src/changelog/v2.0.md:42 +msgid "card import function" +msgstr "" + +#: src/changelog/v2.0.md:43 +msgid "collection can be saved on internal memory" +msgstr "" + +#: src/changelog/v0.1-to-1.1.3.md:2 +msgid "AnkiDroid has continuously evolved collectively as an open source project, with the first version released to the Google Market on [June 28 2009](http://nicolas-raoul.blogspot.jp/2009/06/just-published-ankidroid-on-market.html). " +msgstr "" + +#: src/changelog/v0.1-to-1.1.3.md:4 +msgid "Version 1.1.3 was the last 1.x version (released on 26th June 2012), before the incompatible AnkiDroid v2.0 was released, essentially rewritten from scratch to be compatible with the new Anki Desktop v2.0." +msgstr "" + diff --git a/src/SUMMARY.md b/src/SUMMARY.md new file mode 100644 index 0000000..bca010c --- /dev/null +++ b/src/SUMMARY.md @@ -0,0 +1,58 @@ +# Summary + +[Introduction](intro.md) + +- [Getting started](getting-started.md) +- [The Deck List](deck-picker.md) +- [Navigation Drawer](drawer.md) +- [Deck Overview Screen](deck-overview.md) +- [Study Screen](reviewer.md) +- [Add Note Screen](adding-notes.md) +- [Edit Note Screen](editing-notes.md) +- [Finding/Searching/Browsing](browser.md) +- [Filtered Decks](filtered-deck.md) +- [Importing Anki Files](importing/importing-anki-files.md) + - [Importing Anki Databases (.anki2)](importing/importing-anki-databases.md) +- [Exporting Anki Files](exporting.md) +- [Automatic Backups](backups.md) +- [Preferences](settings.md) +- [Gestures](gestures.md) +- [Note Formatting Toolbar](note-formatting-toolbar.md) +- [Keyboard Shortcuts](keyboard-shortcuts.md) +- [Using Right-To-Left Languages with AnkiDroid](rtl.md) +- [Using Anki Desktop with AnkiDroid](anki-desktop.md) +- [Dealing with merge conflicts on AnkiWeb](ankiweb-conflicts.md) +- [Advanced Features](advanced-features/intro.md) + - [MathJax Support](advanced-features/mathjax.md) + - [Reverse Cards](advanced-features/reverse-cards.md) + - [Custom Fonts](advanced-features/custom-fonts.md) + - [Custom Card Layout](advanced-features/customizing-card-layout.md) + - [Type in the answer feature](advanced-features/type-in-answer.md) + - [Advanced Statistics](advanced-features/advanced-statistics.md) + - [Reminders](advanced-features/reminders.md) + - [Automatic Language Selection](advanced-features/set-language-hint.md) +- [Removed Features](removed-features.md) +- [Storage Migration Error](storage-migration-error.md) +- [Help & Supports](help.md) +- [Alpha testing](alpha-testing.md) +- [Beta testing](beta-testing.md) +- [Contributing to AnkiDroid](contributing.md) +- [Changelog](intro.md) + - [Version 2.16](changelog/v2.16.md) + - [Version 2.15](changelog/v2.15.md) + - [Version 2.14](changelog/v2.14.md) + - [Version 2.13](changelog/v2.13.md) + - [Version 2.12](changelog/v2.12.md) + - [Version 2.11](changelog/v2.11.md) + - [Version 2.10](changelog/v2.10.md) + - [Version 2.9](changelog/v2.9.md) + - [Version 2.8](changelog/v2.8.md) + - [Version 2.7](changelog/v2.7.md) + - [Version 2.6](changelog/v2.6.md) + - [Version 2.5](changelog/v2.5.md) + - [Version 2.4](changelog/v2.4.md) + - [Version 2.3](changelog/v2.3.md) + - [Version 2.2](changelog/v2.2.md) + - [Version 2.1](changelog/v2.1.md) + - [Version 2.0](changelog/v2.0.md) + - [Version 0.1 to 1.1.3](changelog/v0.1-to-1.1.3.md) diff --git a/src/adding-notes.md b/src/adding-notes.md new file mode 100644 index 0000000..bef34e4 --- /dev/null +++ b/src/adding-notes.md @@ -0,0 +1,42 @@ +# Add Note Screen + + + +**Note:** _This section onwards assumes you understand what [notes, fields, card templates, and note types](https://docs.ankiweb.net/getting-started.html#notes--fields) are_ + +To add a new note, tap the **+** button at the bottom of the deck list and choose **Add**. + +![adding.png](img/5-adding.png) + +The following controls are available in the add note screen: + +### Type + +Allows you to select the type of note you'd like to add. +For most purposes the **Basic** note type is sufficient, but for example if you would like an extra card generated which is the reverse of the main card (i.e. shows the **Back** field on the front of the card), you could chose the **Basic (and reversed card)** note type. + +### Deck + +Allows you to change the deck the generated card/cards will be added to. + +### Fields + +Below the deck selector are the fields for the note (for example the **Basic** note type has two fields **Front** and **Back**). When you tap on a field, a keyboard will come up, allowing you to type in information. + +### Media Buttons + +Next to each field is an attach icon, which allows you to add media to your note (this feature is currently in the experimental phase).\ +Add image lets you add images either via your device's camera (if it has one), or from your photo library. +Record audio allows you to record your voice and place it into a field. The advanced editor lets you automatically search for translations or pronunciation audio files online. + +### Tags + +Brings up a dialog which lets you add / remove tags from the note. + +### Cards + +Shows the names of the cards which will be generated for the selected note type. Tapping on this button will bring up a dialog which lets you preview the source code for the card template of the selected note type. From here you can edit, preview, add, and delete card templates. See the [cards and templates section](https://docs.ankiweb.net/templates/intro.html) of the Anki Desktop manual for more information about card templates. + +Long press in a text entry field to add a cloze deletion around the selected text, or an empty cloze deletion if there is no selected text. + +When you've finished typing in the content of a note, tap the tick icon in the app bar at the top to add it to your collection. Alternatively, if you want to go back to what you were doing without saving, you can tap the app icon, or use the hardware back button. diff --git a/src/advanced-features/advanced-statistics.md b/src/advanced-features/advanced-statistics.md new file mode 100644 index 0000000..cab0be6 --- /dev/null +++ b/src/advanced-features/advanced-statistics.md @@ -0,0 +1,31 @@ +# Advanced Statistics + +If Advanced Statistics are enabled, it changes the **Forecast** graph so that it shows the estimated number of reviews that will be due on a given day in the future taking into account future reviews, learning new cards and failing cards. The bars and the left axis show the number of cards due on each day if you study all cards each day, while the line and the right axis show the number of unseen (shown as **learn**), young and mature cards your deck or collection will consist of if you study all cards each day. The forecast graph does count reviews that are currently overdue. It assumes that the overdue cards will be reviewed according to the **maximum reviews/day** deck option. + +Advanced Statistics can be enabled in `Settings -> Advanced -> Advanced Statistics` (in plugin section). + +The outcome of future reviewing, learning or failing cards affects reviews after that future review. To take this into account, the probability of each outcome is computed from the review log. Then the outcome is randomly chosen, such that an outcome which is more likely according to the review log is more likely to be chosen than an outcome which is less likely according to the review log. The settings all affect how the effect of the outcome of future reviews on subsequent reviews is taken into account. + +### Compute first n days, simulate remainder + +If this setting is set to a number greater than 0, instead of randomly choosing an outcome, each possible outcome is taken into account in the simulation, together with its probability. The probability is taken into account for the graph and for future reviews in which it results, which also affect the graph. +One review has a couple of possible outcomes (say 4), which all result in a review. That review also has a couple of possible outcomes and so on. If many reviews are simulated this way, many reviews (4 x 4 x 4 x ... ) have to be taken into account which increases the time it takes to compose the graph. +Therefore, for reviews later than n days from now are simulated by randomly choosing an outcome. + +In summary, higher n gives a more accurate graph, but it takes more time to compose the graph. + +### Precision of computation + +Reviews which occur with a probability smaller than 100% minus the configured precision of the computation are simulated by randomly choosing an outcome rather than taking into account each possible outcome. This setting is only applicable if the first n days are computed. +If Advanced Statistics are disabled, the **Forecast** graph shows the estimated number of reviews that will be due on a given day in the future if you do not review cards, learn no new cards and fail no cards. + +In summary, higher precision gives a more accurate graph, but it takes more time to compose the graph. + +### Number of iterations of the simulation + +Composes the graph several times and then displays the average of these graphs. +Each time the graph is composed, another outcome might be randomly chosen. If we average many outcomes which are randomly chosen taking into account the probabilities from the review log, the average outcome will likely be close to the average of the probabilities from the review log. +If we average many graphs, the average graph will likely be close to the graph which is generated by taking into account all possible outcomes. +If the number of graphs which are averaged is not too high, it will be faster than taking into account all possible outcomes. + +In summary, a higher number of iterations gives a more accurate graph, but it takes more time to compose the graph. diff --git a/src/advanced-features/custom-fonts.md b/src/advanced-features/custom-fonts.md new file mode 100644 index 0000000..e47dfa0 --- /dev/null +++ b/src/advanced-features/custom-fonts.md @@ -0,0 +1,15 @@ +# Custom Fonts + +AnkiDroid allows you to use non-system fonts on your cards. To set them up properly, it is strongly recommended to use the official method that is used by Anki Desktop. Please see [the corresponding section in the desktop manual](https://docs.ankiweb.net/templates/styling.html#installing-fonts) for more information. + +Alternatively, you can create a new subfolder **fonts** in the main AnkiDroid directory (i.e. the folder which contains the **backups** subfolder, specified under `Settings > Advanced > AnkiDroid directory)`, copy a compatible font file (i.e. .ttf) there, and then set this as the default font under `Settings > Fonts > Default font`. + +**Note:** this method will change the default font for **all** of your cards, whereas the official method can be more specific. Also, if you sync with AnkiWeb, using this method will lead to cards being displayed differently on different devices. + +Only fonts in the ttf format are officially supported in Anki/AnkiDroid; the [Google Noto](https://fonts.google.com/noto) font set is highly recommended for all languages, and some other free fonts can be found [here](https://github.com/ankidroid/Anki-Android/wiki/Freely-distributable-fonts). + +Please note that AnkiDroid has to load the entire font into memory in order to use it, and fonts for Asian languages can be quite large. If you have an older device and notice AnkiDroid crashing frequently after installing a font, you may have exceeded your device's memory limits. For Google Noto, it's not recommended to use the combined CJK font, rather get the individual languages [separately from here](https://github.com/googlei18n/noto-cjk). + +> **Note 1**: If you have **Fetch media on sync** disabled, you may need to manually copy the font file from Anki Desktop to your AnkiDroid/collection.media folder. + +> **Note 2**: If you can't get your font to work after following the steps in here and the Anki Desktop manual, please refer to the FAQ for detailed steps on how to debug font issues. diff --git a/src/advanced-features/customizing-card-layout.md b/src/advanced-features/customizing-card-layout.md new file mode 100644 index 0000000..4775529 --- /dev/null +++ b/src/advanced-features/customizing-card-layout.md @@ -0,0 +1,7 @@ +# Custom Card Layout + +The layout of flashcards is completely customizable, although this is an advanced topic with a fairly steep learning curve, and you will probably find it a lot more convenient to do the customization with [Anki Desktop](../anki-desktop.md). + +The [card templates section](https://docs.ankiweb.net/templates/intro.html) of the Anki Desktop manual has detailed instructions on how to edit note types, and most of the actions discussed there are also available from AnkiDroid by tapping **cards** at the bottom of the note editor, or choosing the **manage note types** option in the deck picker. Since detailed information on customizing card layouts is available in the Anki desktop manual, it will not be repeated here. + +There is an [advanced formatting page](https://github.com/ankidroid/Anki-Android/wiki/Advanced-formatting) on the AnkiDroid wiki with various hints on how you can get the most out of your card formatting, and we encourage you to read it, and edit it freely if you have any tips that you'd like to share with the community. diff --git a/src/advanced-features/intro.md b/src/advanced-features/intro.md new file mode 100644 index 0000000..7928d5c --- /dev/null +++ b/src/advanced-features/intro.md @@ -0,0 +1,10 @@ +# Advanced Features + +- [MathJax Support](mathjax.md) +- [Reverse Cards](reverse-cards.md) +- [Custom Fonts](custom-fonts.md) +- [Custom Card Layout](customizing-card-layout.md) +- [Type in the answer feature](type-in-answer.md) +- [Advanced Statistics](advanced-statistics.md) +- [Reminders](reminders.md) +- [Automatic Language Selection](set-language-hint.md) diff --git a/src/advanced-features/mathjax.md b/src/advanced-features/mathjax.md new file mode 100644 index 0000000..d43c432 --- /dev/null +++ b/src/advanced-features/mathjax.md @@ -0,0 +1,15 @@ +# MathJax Support + +Mathjax is a modern typesetting library for math and chemistry. AnkiDroid supports Mathjax cards out of the box. Mathjax is configured to expect TeX formatting, with `\(` and `\)` delimiting inline equations and `\[` and `\]` for display equations. + +To try it out, enter the following into a field: + +``` +\(\sqrt{x}\) +``` + +and preview the card. + +For more details, see [Mathjax Support](https://docs.ankiweb.net/math.html#mathjax) in the Anki Manual. + +[Previous workarounds](https://www.reddit.com/r/Anki/comments/ar7lxd/how_to_load_mathjax_color_extension_on_anki/egm6u5j) are no longer necessary as of AnkiDroid 2.9. diff --git a/src/advanced-features/reminders.md b/src/advanced-features/reminders.md new file mode 100644 index 0000000..f2d6914 --- /dev/null +++ b/src/advanced-features/reminders.md @@ -0,0 +1,8 @@ +# Reminders + +AnkiDroid can remind you to devote some time to reviewing cards every day at a specific time via Android's notification framework. +You can configure reminders for each options group independently. +To configure a notification go to Deck options > Reminders, then tick the checkbox and select the time you want to be notified at. +To stop receiving notifications go to Deck options > Reminders and unmark the checkbox. + +Notifications only work for top level decks. Please let us know if you want us to add notifications for subdecks too. diff --git a/src/advanced-features/reverse-cards.md b/src/advanced-features/reverse-cards.md new file mode 100644 index 0000000..f9d4d32 --- /dev/null +++ b/src/advanced-features/reverse-cards.md @@ -0,0 +1,11 @@ +# Reverse Cards + +The Anki system has [built-in note types which allow you to review cards in both directions](https://docs.ankiweb.net/getting-started.html#note-types). +When [creating new material](../adding-notes.md) in AnkiDroid, you should choose one of these note types, such as **Basic (and reversed card)**, which will automatically generate a reverse card for you. + +![ReverseNoteType](../img/ReverseNoteType.png) + +If you used the wrong note type when adding your material, you can change the note type via the [edit note screen](../editing-notes.md), or you can change the note type for multiple cards at once using the browser in Anki Desktop. +To do this, follow the instructions in the [syncing with Anki Desktop section](../anki-desktop.md), then in Anki Desktop open the browser, select the cards you want to change, then choose **Change note type** from the menu. + +Alternatively, if your cards are using a custom card layout which doesn't include a reverse card, you can edit the note type to include a reverse card by following the instructions in the [reverse cards section](https://docs.ankiweb.net/templates/generation.html#reverse-cards) of the Anki Desktop user manual. While less convenient than using Anki Desktop, it is possible to edit the note type from directly within AnkiDroid as well; see the [custom card layout section](../advanced-features/customizing-card-layout.md) for more on this. diff --git a/src/advanced-features/set-language-hint.md b/src/advanced-features/set-language-hint.md new file mode 100644 index 0000000..bbf7377 --- /dev/null +++ b/src/advanced-features/set-language-hint.md @@ -0,0 +1,5 @@ +# Automatic Language Selection + +AnkiDroid has an in Automatic Language Selection feature in the Note Editor starting with AnkiDroid 2.13. This feature allows you to define a default language to be used in your keyboard for a field in a note type. + +For example, if you have Russian and English note fields, and your keyboard supports the setImeHintLocales Android API, the keyboard layout will switch to Russian in the first field and back to English in the second automatically when the fields get focus. [Checkout video reference for demonstration](https://www.youtube.com/watch?v=JrxDjTrRhBE) diff --git a/src/advanced-features/type-in-answer.md b/src/advanced-features/type-in-answer.md new file mode 100644 index 0000000..df9c316 --- /dev/null +++ b/src/advanced-features/type-in-answer.md @@ -0,0 +1,26 @@ +# Type in the answer feature + +AnkiDroid allows you to type in the correct answer and then compare it to the right answer. You have to set this up with Anki desktop, as described in the [Anki Desktop manual](https://docs.ankiweb.net/templates/fields.html#checking-your-answer). + +Anki desktop replaces the **{{type:NN}}** field on the front of a card with an input box in the card. On AnkiDroid it is replaced with a **......** prompt instead, and a text input box is shown at the bottom. The comparison between typed text and the correct text is shown on the answer side in place of the **{{type:NN}}** field there, like on Anki desktop. + +The text input box and the soft keyboard can be hidden by ticking **Disable typing in answer** in the preferences. + +Even with typing disabled, the correct answer is shown on the answer side. This is done on purpose; otherwise the correct answer might not be shown at all. + +To hide the comparison (e.g. because the correct answer is shown anyway), the HTML id **typeans** can be used. +Add following to the [card styling](https://docs.ankiweb.net/templates/styling.html#card-styling) using Anki Desktop. + +```css +.mobile #typeans { + display: none; +} +``` + +The type answer prompt and the comparison have more classes that can be used to change the way they are displayed. Some of these are the same as on Anki Desktop, some are specific to AnkiDroid. + +The comparison uses three classes, typeGood, typeBad and typeMissed to add green, red and gray background to the typing comparison. These three classes are used on Anki desktop as well. + +The **......** prompt has the class **typePrompt**. + +When typing is set to off in the preferences, the class **typeOff** is added to the prompt on the question side, and to the div element containing the comparison on the answer side. This class can be used to show the type prompt or to hide the typing comparison in this case. diff --git a/src/alpha-testing.md b/src/alpha-testing.md new file mode 100644 index 0000000..442dc1c --- /dev/null +++ b/src/alpha-testing.md @@ -0,0 +1,6 @@ +# Alpha testing + +If you are more adventurous, you can also become an alpha tester, by joining the [alpha testers group](https://groups.google.com/forum/#!forum/ankidroidalphatesters) +in addition to performing the above steps for beta testing. + + diff --git a/src/anki-desktop.md b/src/anki-desktop.md new file mode 100644 index 0000000..e6a034f --- /dev/null +++ b/src/anki-desktop.md @@ -0,0 +1,36 @@ +# Using Anki Desktop with AnkiDroid + + + +Anki has a free cloud synchronization service called AnkiWeb that makes it easy to keep your card decks in sync between mobile devices and your computer. If you cannot use sync for some reason, it's also possible to use USB, though this method is more laborious. + +Note that AnkiDroid is not affiliated with Anki Desktop or AnkiWeb. AnkiDroid is based on Anki Desktop but it is developed by an entirely separate community of volunteers. + +![AnkiDesktop.png](img/AnkiDesktop.png) + +## Via Cloud Sync + +Before you can use AnkiWeb, you'll first need to create an account by visiting [https://ankiweb.net](https://ankiweb.net) and clicking the **Sign Up** button. If you have used AnkiWeb in the past, you can skip this step. After signing up, see the corresponding instructions below, depending on whether you are trying to get your existing decks into AnkiDroid or out of AnkiDroid. + +### Sync existing decks into a new AnkiDroid install + +In this scenario you have some existing Anki decks that you want to copy into a new install of AnkiDroid by syncing with AnkiWeb. Open the Anki client with your existing decks (usually this would be Anki desktop, but it could also mean a version of AnkiDroid you have been using on another device), and click the synchronization button (which has two arrows in a circle) at the top right of the deck list. + +If you have never used AnkiWeb before you will need to enter your credentials if prompted, and then press the **Upload to AnkiWeb** button to confirm overwriting the empty collection on AnkiWeb with your existing decks in Anki. Anki will upload all your cards, images and audio to AnkiWeb. If you have a lot of media, this may take some time. + +Once the synchronization has completed, open AnkiDroid in the device that you are trying to copy the existing decks into, and tap the **Sync** button in the app bar at the top of the main [deck list](deck-picker.md). +After entering your AnkiWeb credentials, AnkiDroid will download all your cards and media, and remember your login information for next time. + +Note that if you have any existing material in AnkiDroid before attempting to sync, you may be shown a message asking you to choose to either download from AnkiWeb, or upload to AnkiWeb. If you are happy to lose the cards in AnkiDroid then simply choose **Download**. If you need to merge the existing cards with AnkiDroid then you should see the [resolving conflicts](ankiweb-conflicts.md#dealing-with-merge-conflicts-on-ankiweb) section before continuing. + +After the first synchronization has completed, you can click the sync button again any time you wish to synchronize your changes to the cloud. Only changes made since the previous sync will be sent, so subsequent syncs are a lot faster. + +If you add some new cards on the desktop computer and want to sync them to AnkiDroid, you'd repeat the same basic process: sync on desktop (or close the program, as it syncs automatically on close by default), and then tap the sync button on AnkiDroid. + +### Sync from AnkiDroid to Computer + +The process of syncing from AnkiDroid to computer is essentially the same as syncing from computer to AnkiDroid, but in reverse. + +From the [deck list](deck-picker.md), tap the sync button in the top right (it has two arrows in a circle). If it's your first time using AnkiWeb, you may need to enter your login credentials, and then press the "upload" button to upload your AnkiDroid collection to AnkiWeb. + +Once the synchronization has completed, open Anki Desktop on your computer and press the sync button there (with two arrows in a circle), and Anki will download your collection. diff --git a/src/ankiweb-conflicts.md b/src/ankiweb-conflicts.md new file mode 100644 index 0000000..f319be2 --- /dev/null +++ b/src/ankiweb-conflicts.md @@ -0,0 +1,49 @@ +# Dealing with merge conflicts on AnkiWeb + +Although it should not happen often, occasionally you may end up in the position where your cards on AnkiDroid can not be automatically merged with the cards on AnkiWeb. In this case it's necessary to choose to either upload to or download from AnkiWeb, which would overwrite any changes on the other side. + +If you have new cards on both sides which you want to keep, before syncing you can [export a deck package](exporting.md) for each deck containing new cards from AnkiDroid, then when you do the sync choose **download** to download from AnkiWeb. After the synchronization has completed, you can import the decks you previously exported from AnkiDroid, as per the [importing section](importing/importing-anki-files.md). + +## Via USB + +If you don't have regular internet access, it's still possible to copy decks back and forth to your device, by using USB. + +The USB method works by importing or exporting all your decks at once. This means that unlike syncing via AnkiWeb, you can't make changes from two locations at once and then merge them. Instead, if you wish to add cards on the desktop, you need to make sure you export the latest version of your collection from your mobile device first, or you'll end up losing any reviews done on the mobile device. + +Thus the workflow you would typically use is to export your collection from your mobile device and import it into the desktop, make modifications on the desktop, and then export your collection and import it back into your mobile device. + +AnkiDroid can't directly import text files. If you wish to do that, you'll need to do that with the desktop program, and then import your collection into AnkiDroid. + +### Copy all decks from Anki Desktop to AnkiDroid via USB + +On your computer: + +1. Open the desktop program. +2. Choose File>Export from the menu. +3. Click the **Export...** button. Make sure to leave **all decks** selected, as it's not possible to import individual decks into AnkiDroid. **Include scheduling information** must also remain checked. +4. Anki will automatically create a collection.apkg on your desktop. If the file is named something else, please see the previous step again. +5. Connect your Android device to your computer via the USB cable. +6. Open the file explorer on your computer and view the contents of your Android device. +7. Locate the AnkiDroid folder. +8. Drag the collection.apkg file from your desktop into this AnkiDroid folder. + +Then in AnkiDroid: + +1. From the main decks screen, tap **Import file** from the menu +2. Tap on **Collection** and then confirm + +Once complete, the decks on your device will have been replaced with the decks from your desktop. See the section on +[importing apkg files](importing/importing-anki-files.md) for more help with importing. + +### Copy all decks from AnkiDroid to Anki Desktop via USB + +The process to copy your decks from AnkiDroid to Anki Desktop is essentially the same as above, but in reverse. + +1. Start with your device disconnected from USB +2. Choose **Export collection** from the main menu in the Deck Screen +3. Ensure **Include scheduling information** remains checked and press **OK** +4. Connect device to computer using USB +5. Copy the **collection.apkg** from the path specified in the message to the desktop on your computer +6. Double click on the file to import into Anki Desktop + +See the [exporting section](exporting.md) below for more detailed information on exporting from AnkiDroid. diff --git a/src/backups.md b/src/backups.md new file mode 100644 index 0000000..f8d6777 --- /dev/null +++ b/src/backups.md @@ -0,0 +1,8 @@ +# Automatic Backups + +AnkiDroid will automatically create backups of your collection for you. The backups include all your cards and statistics, but do not include sounds or images. + +The backup is taken in the background when you first start the app. A backup will only happen if more than 5 hours has elapsed since the last time a backup was created. +By default, AnkiDroid will store the last 8 backups; this number can be changed in the main settings. + +You can restore a backup by choosing the _restore from backup_ option from the main menu of the [decks screen](deck-picker.md). diff --git a/src/beta-testing.md b/src/beta-testing.md new file mode 100644 index 0000000..a7f223a --- /dev/null +++ b/src/beta-testing.md @@ -0,0 +1,14 @@ +# Beta testing + +If you want to try out the latest features in AnkiDroid, you can sign up for the beta testing program as follows: + +1. Visit the [Google Play Beta page](https://play.google.com/apps/testing/com.ichi2.anki) +2. Click **Become a beta tester** + +After following these steps, the latest beta version will automatically be installed by Google Play in the same way as ordinary updates. + +If you are more adventurous, you can also become an alpha tester, by joining the [alpha testers group](https://groups.google.com/g/ankidroidalphatesters) in addition to performing the above steps for beta testing. + +Please submit any bugs you find in these development versions to the AnkiDroid issue tracker, as per the [main help page](help.md). + +If you wish to leave the testing program at any time, simply visit the [Google Play Beta page](https://play.google.com/apps/testing/com.ichi2.anki) and click **Leave the test**. diff --git a/src/browser.md b/src/browser.md new file mode 100644 index 0000000..ce7e3fe --- /dev/null +++ b/src/browser.md @@ -0,0 +1,65 @@ +# Finding/Searching/Browsing + + + +You can search for or browse cards by tapping the **Card browser** button from the [navigation drawer](drawer.md). + +![img/6-browser.png](img/6-browser.png) + +The browser screen starts by displaying all the cards in the currently selected deck. You can search for cards in the selected deck by tapping the magnifying glass icon in the top. You can change the selected deck (or change to all decks) by choosing the deck from the dropdown list on the top left. + +By default, the first column in the browser gives the text which will be shown on the question (i.e. front side) of the flashcard, and the second column shows the text from the answer (i.e. the back side) of the flashcard. + +The first column can also be configured to show the [sort field](https://docs.ankiweb.net/editing.html#customizing-fields) for a more compact display. The second column can be configured to show many different parameters by tapping the drop down menu in the column heading. + +Note that the content of the columns is dynamically calculated as your scroll through the list of the cards. + +From the search results, you can tap on a card to edit it (see the [edit note section](editing-notes.md) above), or long-tapping on it will show a menu allowing you to perform the following actions: + +#### Mark / unmark note + +Add / remove the **marked** tag from the note. Cards with a marked note are highlighted in purple. + +#### Flag card + +Change or remove the color coded **flag** on the card. Cards with a flag are highlighted in the flags color. + +#### Suspend / unsuspend card + +Suspended cards are highlighted in yellow, and are not shown during review. + +#### Delete note + +Delete the note of the currently selected card, and all cards belonging to that note. This action cannot be undone without [restoring from backup](backups.md). + +#### Preview + +Render the currently selected card so that you can see what it looks like in the reviewer. + +#### Select multiple cards + +Long-tapping on a single card will select the single card. While that card is selected, if you long-tap on another card on your screen, then all of the cards between the first selected card and the last card will be selected. This allows for actions to be performed on multiple cards at once. + +## Searching + +AnkiDroid supports all the search strings that the desktop version of Anki does, allowing you to perform quite complex searches. Some examples: + +#### tag:marked + +show cards that with the tag **marked** + +#### is:due + +show only cards that are waiting for review + +#### front:rabbit + +show only cards where the front field is exactly **rabbit** + +#### flag:1 + +show only cards marked with a red flag + +For a full list of the possibilities, please see the section in the [desktop manual](https://docs.ankiweb.net/searching.html). + +Alternatively, some more commonly used filters (marked, suspended, and tagged cards) can be quickly applied without manually typing them by choosing them from the overflow menu. You can also save and recall common search queries from the menu. diff --git a/src/changelog.md b/src/changelog.md new file mode 100644 index 0000000..b79234e --- /dev/null +++ b/src/changelog.md @@ -0,0 +1,20 @@ +# AnkiDroid Changelog + +- [Version 2.16](/changelog/v2.16.html) +- [Version 2.15](/changelog/v2.15.html) +- [Version 2.14](/changelog/v2.14.html) +- [Version 2.13](/changelog/v2.13.html) +- [Version 2.12](/changelog/v2.12.html) +- [Version 2.11](/changelog/v2.11.html) +- [Version 2.10](/changelog/v2.10.html) +- [Version 2.9](/changelog/v2.9.html) +- [Version 2.8](/changelog/v2.8.html) +- [Version 2.7](/changelog/v2.7.html) +- [Version 2.6](/changelog/v2.6.html) +- [Version 2.5](/changelog/v2.5.html) +- [Version 2.4](/changelog/v2.4.html) +- [Version 2.3](/changelog/v2.3.html) +- [Version 2.2](/changelog/v2.2.html) +- [Version 2.1](/changelog/v2.1.html) +- [Version 2.0](/changelog/v2.0.html) +- [Version 0.1-to-1.1.3](/changelog/v0.1-to-1.1.3.html) diff --git a/src/changelog/intro.md b/src/changelog/intro.md new file mode 100644 index 0000000..e69de29 diff --git a/src/changelog/v0.1-to-1.1.3.md b/src/changelog/v0.1-to-1.1.3.md new file mode 100644 index 0000000..4328def --- /dev/null +++ b/src/changelog/v0.1-to-1.1.3.md @@ -0,0 +1,6 @@ +## Version 0.1 to 1.1.3 + +AnkiDroid has continuously evolved collectively as an open source project, with the first version released to the Google Market on [June 28 2009](http://nicolas-raoul.blogspot.jp/2009/06/just-published-ankidroid-on-market.html). + +Version 1.1.3 was the last 1.x version (released on 26th June 2012), before the incompatible AnkiDroid v2.0 was released, +essentially rewritten from scratch to be compatible with the new Anki Desktop v2.0. diff --git a/src/changelog/v2.0.md b/src/changelog/v2.0.md new file mode 100644 index 0000000..bde3541 --- /dev/null +++ b/src/changelog/v2.0.md @@ -0,0 +1,47 @@ +## Version 2.0.4 (2014-02-03) + +- Fix issue with typing answers +- Default font now overrides card font +- Fixed audio playback image being covered by text on Android 2.3 +- Fixed reviewer crash when language set to Romanian +- Translation fixes + +## Version 2.0.2 (2013-12-15) + +- Fixed lots of crashes +- Tablet UI fixes +- Fixed new card ordering issues +- Card appearance now matches desktop Anki. (Centering cards is off by default but can be re-enabled) +- Option groups can now be changed in AnkiDroid +- Clear error message when using a bad template +- Fixed timeboxing notifications +- Properly scale images +- Better custom font handling +- More settings (next day starts at, timeboxing value, etc.) +- Changing AnkiDroid interface language now works. +- Fixed import/shared deck download issues ("not a valid apkg file") +- Fixed invisible text on Motorola devices +- Focus on answer when revealed +- Filtered decks are now blue in deck list +- Removed unused circle button in note editor + +## Version 2.0.1 (2013-02-06) + +- Upgrade wizard +- Fix importing apkgs +- Fix media syncing + +## Version 2.0 (2013-01-03) + +- complete revision +- libanki2.0 scheduling +- new learning mode +- new layout +- merge syncing possible now +- better statistics +- decks are now saved in a single collection +- options are shareable now +- tablet layout +- tons of performance improvements +- card import function +- collection can be saved on internal memory diff --git a/src/changelog/v2.1.md b/src/changelog/v2.1.md new file mode 100644 index 0000000..e68fd24 --- /dev/null +++ b/src/changelog/v2.1.md @@ -0,0 +1,19 @@ +## Version 2.1.3 (2014-04-05) + +- Create new notes in correct deck +- TTS fixes + +## Version 2.1 (2014-03-27) + +- Lots of Bug Fixes +- New custom study option with improved tag selection +- New preview card feature in note editor (experimental) +- New override font preference in addition to default font +- New "Kanji Info" feature (enabled in preferences->reviewing->Kanji Info) +- Improve Aedict integration +- Support for Samsung Multi-Window +- Fix Some TTS Issues +- Updated Translations +- Remove unused media check when deleting decks +- Significantly increase speed for reducing filtered decks +- Remove upgrade wizard diff --git a/src/changelog/v2.10.md b/src/changelog/v2.10.md new file mode 100644 index 0000000..baf99ea --- /dev/null +++ b/src/changelog/v2.10.md @@ -0,0 +1,73 @@ +## Version 2.10.4 (2020-05-31) + +- Workaround expired AnkiWeb SSL Root certificate +- [Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/22?closed=1) + +## Version 2.10.3 (2020-05-29) + +- Fix crash on no permissions on Card Browser system text menu entry +- Fix crash in widget if external storage unmounts +- Fix crash on device reboot if no permissions +- Fix crash if deck picker background image too large +- Fix crash in tags dialog +- Fix bad data generated for null objects (Anki compatibility) +- [Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/21?closed=1) + +## Version 2.10.2 (2020-05-14) + +- Fix type answer cards not rendering correctly +- Fix type answer card template creation on non-English new installs +- Fix frequent full sync caused by incorrect learning card counts +- Fix crash importing into fresh install with no storage permission + +## Version 2.10.1 (2020-05-13) + +- Updated all translations from crowdin translators +- Fix crash note editor on rapid back button +- Fix crash from incorrect Thai translation + +## Version 2.10 (2020-05-12) + +- Add welcome dialog explaining need for storage permission +- Add support for Flags on cards (including flagging by gesture) +- Add ability to set background image in Deck Picker +- Add localization of standard templates created in fresh install +- Add support for card javascript to reload current card programmatically +- Add support for restricted learning / classroom devices +- Add preference to disable "Extended Text UI" full-screen editor +- Add CSS style capability to heavy checkmark and down arrow in card +- Add display of current interval on reschedule dialog +- Add support for card javascript to answer cards programmatically +- Add ability to toggle sticky field in field editor +- Improve deck list newline, style, script tag handling in deck descriptions +- Improve whiteboard on/off state handling, especially between day/night mode +- Improve multi-selection options in CardBrowser +- Improve performance (systematic optimization process, lots of improvements!) +- Improve handling of erroneous notes (missing fields, improper clozes) +- Improve user messaging on network connection failures +- Improve counting of suspended/buried cards in advanced statistics +- Improve v2 scheduler compatibility with Anki ecosystem +- Improve handling / detection of full sync need +- Improve Anki compatibility by allowing more field/model/deck name characters +- Improve deck list estimated review times with human scale times +- Fix text scaling bug in card browser +- Fix crash in export while using v2 scheduler +- Fix Custom Tabs crash with non-default system web browser +- Fix issues with import of packages with long Unicode names +- Fix incorrect intervals on lapsed filtered v2 scheduler cards +- Fix multimedia editor save/cancel behavior +- Fix incorrect button/gesture availability while existing task is still active +- Fix type answer crash on invalid characters +- Fix cloze references not being recognized in all fields +- Fix invalid ability to change deck to a filtered deck +- Fix crashes on adding invalid images, audios, and videos +- Fix CardBrowser crash after deleting card +- Fix crash and help user if no browser detected +- Fix Reviewer crash if card not available +- Fix crash / improve import of pasted decks +- Fix clicking hint field blocks key input in Reviewer +- Fix Previewer forgetting which card to show on device rotation +- Fix Mathjax/cloze interactions +- Fix vertical alignment of touch area in full-screen review +- Fix handling of ':::' in deck names +- Fix incorrect display of HTML comments in card browser diff --git a/src/changelog/v2.11.md b/src/changelog/v2.11.md new file mode 100644 index 0000000..599eda6 --- /dev/null +++ b/src/changelog/v2.11.md @@ -0,0 +1,59 @@ +## Version 2.11.3 (2020-06-17) + +- Fix out-of-memory errors when importing very large decks +- Fix incorrect out-of-space message on import in Android 4 +- Fix crash if card viewer closed quickly after view +- Fix unzip fail on .apkg files >2GB +- Fix crash on edit note in browser multi-select + +## Version 2.11.2 (2020-06-10) + +- Add santali language +- Fix Hebrew, Indonesian, Tagalog languages +- Improve error reporting around apkg import failures +- [Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/24?closed=1) + +## Version 2.11.1 (2020-06-08) + +- Fix crash in Card Browser multi-select mode +- Fix Custom Steps interval dialog space entry issue +- Fix flags don't export with deck +- Fix AnkiDroid API doesn't handle null model id (Anki Compatibility workaround) +- Fix translation crash in sync dialog in Azerbaijani +- [Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/23?closed=1) + +## Version 2.11.0 (2020-06-05) + +- Android minimum supported version is now 4.1 / Jelly Bean / API16 (AnkiWeb Compatibility) +- Change sibling burying should default to off (Anki Compatibility) +- Change learn cards do not go in filtered decks in v1 sched (Anki Compatibility) +- Add Browser Appearance screen, to edit Card Browser render format (Anki Compatibility) +- Add guidance in Note Editor if no cards will be generated despite full fields +- Add all translations from our crowdin.com translation site +- Add ability to decrease daily limit in custom study (Anki Compatibility) +- Add ability to block gesture handling when tapping hints in Reviewer +- Add create subdeck option in deck list long-press context menu +- Add edit note action in Card Browser multi-select mode +- Add ability to turn off 'Card Browser' system text context menu item +- Add nightMode CSS selector for card HTML (Anki Compatibility) +- Add ability to change just the case of a deck name +- Add page-up/page-down gestures +- Improve gesture handling in full-screen / immersive mode +- Improve handling of cloze deletion in TTS mode +- Improve Card Browser search from Android text selection menu +- Improve Card Browser with default hide of media filenames +- Improve Reviewer auto-advance by waiting for TTS to finish +- Improve transparent SVG display in night mode with white background +- Improve anki package import handling +- Improve AnkiWeb login form enter button handling +- Improve hardware back button handling in restore from backup +- Improve Reviewer display of un-rendered LaTeX +- Improve TTS / auto-answer combination, wait for TTS before advance +- Workaround Firefox open downloaded deck bug +- Workaround crash on Samsung devices with >500 deck reminders +- Fix card template editor mistakenly allowing add template on cloze type +- Fix language change preference +- Fix ability to unbury a deck in deck list +- Fix app bar item flicker during review +- Fix V2 scheduler learning card count after undo +- [Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/13?closed=1) diff --git a/src/changelog/v2.12.md b/src/changelog/v2.12.md new file mode 100644 index 0000000..389a6c3 --- /dev/null +++ b/src/changelog/v2.12.md @@ -0,0 +1,25 @@ +## Version 2.12.1 (2020-07-21) + +- Fix bug previewing edited notes after changing field count +- Fix crash previewing edited notes from dynamic decks +- Fix crash restarting app after a crash +- [Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/28?closed=1) + +## Version 2.12.0 (2020-07-18) + +- Add Crop image feature +- Add Preview in note editor +- Add edit tags in reviewer +- Add volume buttons as gestures +- Add whiteboard pen color +- Add microphone tool bar in reviewer +- Add javascript API (check the Wiki!) +- Improve: app is 3MB smaller +- Fix: show whole tag in tags dialog +- Fix copy note copies tags too +- Fix data corruption canceling template edits +- performance and bug fixes everywhere! + +11 volunteers made hundreds of individual changes this release + +[Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/18?closed=1) diff --git a/src/changelog/v2.13.md b/src/changelog/v2.13.md new file mode 100644 index 0000000..d501d53 --- /dev/null +++ b/src/changelog/v2.13.md @@ -0,0 +1,90 @@ +## Version 2.13.5 (2020-10-03) + +- Fix performance for fast (<1s) answers in review +- Add links to new Arabic help/manual translation +- Add back button handling to changelog display +- Add rate button to changelog +- Add warning message to handle future db upgrades +- Sync all translations from our volunteer translators (thanks everyone!) + +## Version 2.13.4 (2020-09-29) + +- Fix crash showing TagsDialog +- Fix crash in gesture detection +- Improve import interrupted error message +- Fix scheduler counts after undo +- Fix Card Browser preview after sort +- Fix button display if answer animation incomplete +- Sync all translations + +## Version 2.13.3 (2020-09-23) + +- Fix double-clicking answer buttons skipping cards +- Change missing media warning to twice-per-session not twice-per-deck +- Change answer button fade on open +- Updated all translations from volunteer crowdin.com site up to 20200923 + +## Version 2.13.2 (2020-09-19) + +- Fix Crash rare on Card Browser exit +- Fix Crash Android 4.4 +- Fix Open Deck failures / improve related messaging +- Fix messaging for Xioami cloze workaround +- Move "set field language" after share on Note Editor context menu + +## Version 2.13.1 (2020-09-17) + +- Add cloze via clipboard paste workaround on MIUI/Xiaomi devices +- Fix Navigation drawer respects safe display / disable animations preference +- Fix Reviewer buttons respect safe display / disable animations preference +- Fix Deck Picker bottom bar opacity +- Fix Error message about missing content on cards +- Fix crash selecting deck that disappears during sync + +## Version 2.13.0 (2020-09-15) + +- Field tag (such as "{{Front}}") appearing in a note's field will be shown as-is in cards. +- Add Sync icon badge when changes are pending sync (can be disabled in options) +- Add Edit Note from card Preview while in Card Browser +- Add "Anki Card" to system context menu (like "Card Browser") - disabled by default +- Add Set keyboard language for specific fields in the note editor (example: one field Japanese, other field Portuguese for input). +- Add Keep keyboard open after adding a note +- Add Card properties available in JavaScript API +- Add JavaScript API versioning for scripts (basis for future plugins) +- Add Auto-Login when selecting saved user account +- Add Allow import of collection.anki21 files when under SchedV1 +- Add New screen for first-time users +- Add Button animations when answering cards +- Add Note Editor: Add shortcuts Ctrl+(Alt)+Shift+C to add a cloze. +- Fix Some cards in learning were not shown at the right time (Only if you undo/bury/suspend/reset/reschedule and the next card goes to learning mode) +- Fix Selected deck has translucent background if a deck picker background is set +- Fix Improved preview screens +- Fix Better accessibility in Deck Browser for partially sighted users +- Fix Improve visibility of "Add/Remove Option Group" +- Fix Improved messages for sync rate limiting error +- Fix Improved messages for reducing study limits +- Fix Improved messaging when collection is missing media +- Fix Improve feedback when accessing Debug Info +- Fix Add additional warnings to reschedule dialog +- Fix Whiteboard pen color can be disabled by pressing icon again +- Fix Ensure all menu items in the reviewer can be customized by "App Bar Buttons" setting +- Fix Scheduler discrepancy handling early interval on filtered decks +- Fix Exports work when cards are missing media +- Fix Crash due to logging. +- Fix Toasts used to show one more card than the number of card actually reviewed during the time box +- Fix Handle newlines properly in Note Editor Preview +- Fix Improve AnkiDroid opening animation +- Fix Show correct answer button when answering via Keyboard +- Fix "New Cards Added" Statistic +- Fix Crash when inserting a cloze when selecting text from right-to-left via keyboard +- Fix "Show Password" icon revealing saved password +- Fix Card browser still contains card after the app goes into background +- Fix Daily unbury occurs during sync if necessary +- Fix On big screen, buttons moved during loading +- Translators If some text change because of minor changes (typos) you won't have to translate it again +- Performance improvements (specifically: initial loading of large collection (lot of decks, note type, card type, fields, long templates...), card browser, deck picker startup, next card view, undo, cancelling tasks such as computing a list of card in browser) +- Dev: Massive dev workflow improvements and automated checks for our translations. +- Dev: Implement backend for CSV Importer +- Dev: Improve crash reporting on app startup +- Dev: Massive improvement in testing, especially around scheduler / card queue behavior +- [Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/27?closed=1) diff --git a/src/changelog/v2.14.md b/src/changelog/v2.14.md new file mode 100644 index 0000000..a330cc8 --- /dev/null +++ b/src/changelog/v2.14.md @@ -0,0 +1,98 @@ +## Version 2.14.6 (20210309) + +- Reviewer: fix "my card is blank now with 2.14.5! help!" 😱 +- Reviewer: fix Android 8/8.1 review buttons disappear (finally?) + +## Version 2.14.5 (20210307) + +- We really appreciate the [donations](https://opencollective.com/ankidroid), they paid for these fixes 🤝 +- NoteEditor: Android 11 users can crop! +- NoteEditor: Canceling crop twice won't delete your image +- DeckList: parent limits altered to match Desktop +- DeckList: current deck saved as correct type +- SchedulerV2: allow very small delays +- KNOWN ISSUE: [Android 8/8.1 answer buttons disappear](https://github.com/ankidroid/Anki-Android/issues/7369). Use gestures as workaround. +- Anyone with Android 8/8.1 that reproduces this and knows how to develop Android layouts? We'd love the help! + +## Version 2.14.4 (20210307) + +- Re-released immediately as 2.14.5 after release script issue 🤷😅 + +## Version 2.14.3 (20210109) + +- [The AnKing](https://www.youtube.com/c/TheAnKing) has graced us with a [new intro video](https://youtu.be/iuBU_OM9oAM)! 🤓 +- Still happily overwhelmed by the [donations](https://opencollective.com/ankidroid) 💪 +- Reviewer: Fix mark note keyboard shortcut +- NoteEditor: Fix to remove padding if removing formatting toolbar +- Previewer: Fix to show same card after edit +- Scheduler: Fix v1 scheduler completes deck when only learn cards due + +## Version 2.14.2 (20201202) + +- Wow! We are humbled by the [donations](https://opencollective.com/ankidroid) 🤯 +- The resources are already going to contributors to improve the app! Thank you ❤️ +- Note Editor: Fix image crop not working first time +- Note Editor: Paste image at cursor not end +- Note Editor: Fix Ctrl+C opens preview +- Note Editor: Add menubar toggle to disable editing toolbar +- Home Screen: Fix Vivo device shortcut creation (again) +- Reviewer: Fix numeric keypad not working +- Note Editor: Fix cloze cards going to wrong deck +- Navigation Menu: Fix safe display app hang +- Preferences: Fix gestures menu translation / ordering issue +- Translations: thanks [translators!](https://crowdin.com/project/ankidroid/activity_stream) - you can help too! +- [Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/39?closed=1) + +## Version 2.14.1 (2020-11-23) + +- Always free, always open source, but you may [donate if you like 😊](https://opencollective.com/ankidroid) +- Move sync button to right of action bar (vs search) +- Fix duplicate note detection +- Fix add deck shortcut on Vivo devices +- Fix non-translatable 'Card Info' strings +- Fix suspended card handling in filtered decks +- Sync translations from volunteers on our crowdin.com site (thank you!) +- Fix crash on mismatched WebView ABIs +- Fix crash invalid filename handling while pasting image +- Fix crash selecting cards in card browser +- Fix crash Android 8 in card browser +- Fix crash in undo labeling +- Fix crash reset password when system browser not exported +- [Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/38?closed=1) + +## Version 2.14.0 (2020-11-18) + +- Enabled Donations - we ❤️ you, [now you can ❤️ us 😊](https://opencollective.com/ankidroid) +- New Screen: Card Info (from Card Browser or as a Reviewer App Bar Button) +- New Screen: Help - easy access to manual, many community pages/manuals, donation page, translations +- Home screen: Add deck shortcut +- Deck Options: SchedV2: Support setting "Hard Factor" +- Card Browser: Add deck filtering +- Card Browser: Filter By Flag +- Card Browser: Adding cards defaults to selected deck +- Card Browser: Many more keyboard shortcuts +- Card Browser: Display the number of cards deleted when deleting a note +- Card Browser: Better handling of deck searches containing wildcards +- Reviewer: Basic Android TV Support +- Reviewer: New Gesture: Abort Learning & Sync +- Reviewer: Support AnkiMobile 9-area gesture touch layout +- Reviewer: Improve "Empty Card" UX +- Reviewer: Keyboard shortcuts for flags (Ctrl+1...4) +- Note Editor: Editor Toolbar (& keyboard shortcuts) - hugely requested feature! +- Note Editor Toolbar: Apply Custom Commands (& keyboard shortcuts) +- Note Editor: Paste to Insert Image +- Note Editor: Made fields full-width +- Note Editor: Change Font Size for fields +- Note Editor: Expand/Collapse Fields +- Note Editor: Clear Field button +- Note Editor: Ctrl+Shift+Num to switch fields +- Note Editor: Improved image addition / naming +- Note Editor: Add preference to convert newline to HTML (or not) +- OS Integration: Default to "Anki Card" in system context menu vs "Card Browser" +- Libanki: Add FileUpload API +- Translations: Tagged screenshots on crowdin.com to help our translators +- Stability: Fix rare crashes (down to ~50/day total w/1.8million installs!) +- Performance: massive number of speedups +- Dev: Massively sped up AnkiDroid builds and improved code readability +- Totals: 345 code changes and hundreds of translations, made by volunteers, in 2 months +- [Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/30?closed=1) diff --git a/src/changelog/v2.15.md b/src/changelog/v2.15.md new file mode 100644 index 0000000..fabc119 --- /dev/null +++ b/src/changelog/v2.15.md @@ -0,0 +1,88 @@ +## Version 2.15.6 (20210714) + +- One more crash fix, no crashes shall be left unfixed! If we can help it. + +## Version 2.15.5 (20210713) + +- [🤜🤛 Thank you! Your support makes the fixes happen!](https://opencollective.com/ankidroid) +- Full-screen navigation drawer drag is a preference, default off +- Floating Action Button ('+') labels are clickable again +- Fixed crash on first run post-install on tablets +- Fixed odd weekly breakdown stats chart behavior +- Fixed crash creating new deck from deck chooser +- [Updated translations](https://crowdin.com/project/ankidroid) (thank you translators!) +- [Full Changelog here](https://github.com/ankidroid/Anki-Android/milestone/47?closed=1) +- We are deep into development for v2.16 + Google Summer of Code, lots of new stuff coming +- Happy reviewing! + +## Version 2.15.4 (20210602) + +- Saw one crash show up for 2.15.3: if you touched the 3 numbers + instead of the deck name on the deck list on phones, it would crash +- Temporarily revert full screen navigation drawer option to fix + +## Version 2.15.3 (20210602) + +- [❤️ Thank you so much for the donations! We appreciate it ❤️](https://opencollective.com/ankidroid) +- Another batch of fixes stabilizing all the work done for AnkiDroid 2.15 +- Fix "Search All Decks" in Card Browser not searching +- Make new full screen navigation drawer open optional, default off +- Preserve edited search in card browser if navigation drawer opens +- Fix crash editing Tags dialog when switching back from another app +- Fix incorrect cloze help link +- Increase touchable area of undo icon +- Fix legacy / handebar template parsing +- Fix icon sizes for notifications and search +- Fix audio files incorrectly importing when attached +- Fix deck options "steps" showing up with lots of decimal places +- Update translations, add Kannada language +- Fix F-Droid app store publishing +- Correct navigation away from and back to Changelog +- Fix template parsing for "{{FrontSide}}" +- Fix stats tab view layout in RTL context +- Fix preview of cloze cards from note editor +- [Full changelog here](https://github.com/ankidroid/Anki-Android/milestone/45?closed=1) + +## Version 2.15.2 (20210526) + +- [❤️ Your donations here give us the time to work on the app, thank you! ❤️](https://opencollective.com/ankidroid) +- 🔥 Hot fixes for 2.15.0 issues (See below for 2.15.0 notes 👇 it was a huge release!) +- 2.15 should have no regressions now we think 🤞 +- That means we'll slow down the releases and these popups now, sorry + thank you +- Fix another API issue breaking card add from external apps +- Fix conditional template issue that caused blank cards for some +- Fix auto-advance ignoring "no advance" setting if card had audio +- Gracefully handle corrupt collections with invalid current decks selected +- Publish to Amazon App Store again (go get AnkiDroid on your Fire devices!) +- [Issue tracker milestone here](https://github.com/ankidroid/Anki-Android/milestone/44?closed=1) + +## Version 2.15.1 (20210525) + +- [❤️ Your donations funded this rapid set of fixes, enjoy! ❤️](https://opencollective.com/ankidroid) +- 🔥 Hot fixes for 2.15.0 issues (See below for 2.15.0 notes 👇 it was a huge release!) +- Do not auto-update users to scheduler v2. Yet. +- Fix crash on undo after deck delete +- Try harder to successfully paste images +- Reviewer performance fix - only load mathjax if needed +- Fixed compatibility issue for 2.15 collections on 2.14 +- Fixed API issue breaking card add from external apps +- Fresh language translations. See a bad translation? [You can fix it easily!](https://crowdin.com/project/ankidroid) +- [Detailed issue log](https://github.com/ankidroid/Anki-Android/milestone/43?closed=1) + +## Version 2.15.0 (20210524) + +- [❤️ Your donations funded these features, enjoy! ❤️](https://opencollective.com/ankidroid) +- Thanks to [Google Summer of Code](https://github.com/ankidroid/Anki-Android/wiki/Google-Summer-of-Code-2021) students for a HUGE effort! +- Way too many changes to describe, but here are the highlights: +- New timezone code supported for sync with AnkiDesktop! +- Performance, stability improvements everywhere +- General UI improvements (accessibility, dark mode, design, more) +- Many new keyboard shortcuts and gesture actions +- Languages: Added Odia, Malayalam; big RTL support improvements! +- Reviewer: Javascript API: many new methods +- Improved account login, sync conflict, card template UI +- Tags and Decks dialogs have search! +- Whiteboard: erase, pen colors, stroke width +- NoteEditor: Mathjax 3, capitalize sentences setting +- Huge quality improvements all over codebase, helps future developers +- [🚧 Full 638 item changelog here! 🚧](https://github.com/ankidroid/Anki-Android/milestone/37?closed=1) diff --git a/src/changelog/v2.16.md b/src/changelog/v2.16.md new file mode 100644 index 0000000..295cf53 --- /dev/null +++ b/src/changelog/v2.16.md @@ -0,0 +1,126 @@ +## Version 2.16.5 (20230906) + +- Fix potential crash in our crash report system. See: Murphy's Law +- Fix incorrect default setting for analytics opt-in. Should be default off. + - Please check your setting if you want to make sure it is off + - Note1: our analytics is always anonymized and never shared as a first step + - Note2: the backend has been disabled for months, so there should be no exposure + - Still this was in error and counter to our strict opt-in ethos. We are deeply sorry. + - We will issue a future update shortly to opt everyone out as a precaution +- Thanks again for your patience waiting for 2.16 - we're on to 2.17 work already! +- We are humbled by the [donations](https://opencollective.com/ankidroid) 🤯 + +## Version 2.16.4 (20230827) + +- Your dev team is still very excited to be able to release quick fixes for you again! +- Last big stability release for 2.16 series (see below for main 2.16 info) +- [❤️ We continue to be very thankful for your support](https://opencollective.com/ankidroid) +- Improved shortcut icons +- Fix card browser scroll position after editing a card +- Improve shared deck download handling +- Fix sound replay on cards +- Fix deck rebuild not updating UI +- Synced with [community language translations](https://crowdin.com/project/ankidroid) +- Development for 2.17 is already in progress! +- Are you still reading this? Good luck in your studies 🤓 + +## Version 2.16.3 (20230818) + +- We meet Play Store requirements again, so we can release fixes quickly again! +- This is a stability release for the just-released 2.16 series (see below for 2.16 info) +- [🤜🤛 Thank you! Your support makes the fixes happen!](https://opencollective.com/ankidroid) +- Fix crash in certain cases adding images +- Fix crash exporting decks with '/' in deck name +- Fix crash displaying whiteboard menu +- Fix crash opening preferences after storage migration +- Remove camera permission (not needed for single photo use) +- Fix sync required indicator not disappearing +- Fix keyboard card answer highlighting whole card +- Fix keyboard card answer causing double-tap +- Fix incorrect deck highlight in tablet mode +- Fix display of saved card searches +- Fix inconsistent italics between Anki / AnkiDroid +- Add ability to map "reschedule" to a gesture +- Allow long preference titles to wrap +- Allow 3rd party cookies in webview to match Anki behavior +- Improve add shortcut icon +- Remove beolingus pronounce feature +- New community-provided translations from https://crowdin.com/project/ankidroid + +## Version 2.16.2 (20230726) + +- You waited patiently nearly 3 years for this release! ⌛ Thank you +- What an effort! v2.16 contains 2,693 changes from 143 different authors 🤯 +- AnkiDroid is a labor of ❤️ with a mission to help the whole world learn more +- [you can ❤️ us back so we have more time to work on it](https://opencollective.com/ankidroid) +- “Why It Took So Long”: Scoped Storage replaces sdcard Storage + - Faster syncing and importing + - AnkiDroid no longer needs permission to access “All Files”! + - ...But you lose access to data on uninstall + - Sync, export/import, check media/database disabled during migration + - Manage Space Activity in System Settings + - Added “Backup Reminder” prompt + - [More info in our FAQ](https://github.com/ankidroid/Anki-Android/wiki/Storage-Migration-FAQ) +- A huge number of crash fixes, too many to mention +- “Auto” Day/Night theming to follow system, Android 13+ themed icon +- Added Anki “New Anki Backend option in advanced settings" - will be default in 2.17 + - We include anki 2.1.61 now, we’re fully up to date! + - Stats Heatmap + - Scheduler v3 support + - CSV Import, Text import + - Card Browser Searches + - Card Info and Deck Options from upstream +- New gesture manager, supports gamepad and bluetooth keyboard +- Translations, new languages, lots of fixes, [you can help!](https://crowdin.com/project/ankidroid/) +- Add support for hierarchical tags +- New Onboarding Screen +- New Preferences + - Icons & Better Categories + - Increase max possible backups to 99 + - Full screen navigation drawer option + - Add Preference for double-tap time interval + - “Insert Field” in Card Template Editor option + - Add "Allow sync on metered connections" option + - New “About” section + - “Developer Options” is now available +- Flags added: Pink, turquoise & purple flags as in Desktop +- Drawing Activity +- Custom Sync Server improvements + - Updated to match new Anki Desktop built-in sync server abilities + - Cleartext traffic permitted (it’s your server, use it how you like) +- Javascript AP changes: + - New bury & suspend card or note API + - New search API + - New text to speech API + - Enhanced reschedule API + - New Reset progress API + - Enable DOM storage so localStorage works +- Use language defined in ‘Language Hint’ when typing the answer +- Mathjax updated to current versions +- Double-tap floating ‘+’ Deck Picker button to add note +- Note Editor SVG, video, clipboard paste import support +- Card Previewer progress bar during preview +- Card Previewer: Show type-in answer in card previews +- Card Browser Support for Indeterminate tags when adding/removing tags +- Sync Account Add “Forgot Email” Button +- Add option to show all deck stats by default +- Add Note Gesture +- Ask to keep data when uninstalling (saves preferences too) +- Reviewer: Allow “TTS” to be moved to the Action Bar +- Note Editor: Allow the import of multiple files +- Import/Export + - Fixed many general problems with import/export + - Export just a deck + - Export just a note +- UI: Snackbars used where possible, and made much more pleasant +- UI: Matched the color of status, action and nav bar to background +- Card Browser: “Note” mode +- Whiteboard - Stylus Only Mode + +## Version 2.16.1 (20230726) + +- Published internally, not generally released + +## Version 2.16.0 (20230726) + +- Unpublished diff --git a/src/changelog/v2.2.md b/src/changelog/v2.2.md new file mode 100644 index 0000000..91e430e --- /dev/null +++ b/src/changelog/v2.2.md @@ -0,0 +1,27 @@ +## Version 2.2.3 (2014-08-04) + +- New media sync protocol +- Fix 2 bugs for opening links and resuming the app + +## Version 2.2 (2014-07-21) + +- Redesign layout +- Add pictures and sounds to flashcards (experimental) +- Make second column in card browser configurable +- Make images on flashcards zoomable +- Improve preview feature and access via action bar +- Simplify menus and settings +- Make slow searches in card browser cancellable +- Improve adding/removing tags +- Fix "type in the answer" and cloze deletion features +- Fix whiteboard feature +- Restore backups from within the app +- Make volume duck on any background music when sounds played +- Make playing of sounds consistent with Desktop version +- Remove animations feature due to being buggy +- Improve speed of showing cards +- Remove duplicate check dialog when adding new flashcards +- Remove swap button when adding or editing flashcards +- Remove kanji info feature (will become optional plugin in the future) +- Make minimum Android version 2.1 +- Fix lots of bugs diff --git a/src/changelog/v2.3.md b/src/changelog/v2.3.md new file mode 100644 index 0000000..95e594d --- /dev/null +++ b/src/changelog/v2.3.md @@ -0,0 +1,25 @@ +## Version 2.3.2 (2014-11-06) + +- Bug fixes: Sync, TTS, Remote images, Advanced editor, Export +- Note: This is the last version of AnkiDroid supported by AnkiWeb. Previous versions will not sync. + +## Version 2.3 (2014-10-27) + +- Add new user manual +- Make statistics identical to Anki Desktop +- Fixes to media sync +- Fix bug where images were not showing +- Change layout of note editor +- Add new disable whiteboard option to reviewer and update icons +- Add full support for APKG export and import +- Add feature to email exported APKG +- Increase default number of backups and use APKG +- Make preview card accessible from card browser +- Make shared decks download with Android browser +- Add reset and reschedule feature in note editor +- Add a new notification system and icon +- Replace tutorial deck with new welcome screen +- Disable opening navigation drawer from reviewer when swipe is used +- Improve audio recording quality +- Support sticky fields when enabled in Anki Desktop +- Many other bug fixes diff --git a/src/changelog/v2.4.md b/src/changelog/v2.4.md new file mode 100644 index 0000000..e3c6707 --- /dev/null +++ b/src/changelog/v2.4.md @@ -0,0 +1,47 @@ +## Version 2.4.4 (2015-10-20) + +- Fix playback of sound files with apostrophes in file name +- Fix new card siblings not being buried for the same day +- Fix media on cards when using the Hebrew Fix option +- Fix crashes related to "Relative overdueness" and make this sort order available on AnkiDroid +- When mixing new and review cards, make their rotation more consistent with desktop + +## Version 2.4.3 (2015-04-21) + +- Fix "unknown field" bug +- Fix crash showing welcome screen on Android 2.3 +- Fix crash caused by widget +- Fix rare crash in browser +- Fix a couple of sync issues +- Fix crash starting AnkiDroid on a small number of devices +- Update translations + +## Version 2.4.2 (2015-03-18) + +- Fix some bugs with cloze templates +- Fix a translation error + +## Version 2.4.1 (2015-03-15) + +- Fix some bugs with filtered decks +- Improve importing of shared decks +- Open settings if AnkiDroid dir inaccessible +- Fix a bug with zooming +- Fix a bug where old card was still shown in reviewer after changing deck +- Fix some issues with cloze deletion +- Fix various crashes +- Update translations + +## Version 2.4 (2015-01-28) + +- Move "preview" feature to browser +- Add ability to change note type of existing flashcards +- Add ability to view and delete card templates +- Fix TTS for most devices +- Support playback of videos (see supported formats [here](http://developer.android.com/guide/appendix/media-formats.html)) +- Improve rendering of second column in browser +- Improve detection of swipe gestures +- Increase number of languages in Glosbe translator +- Add support for Chromebooks +- New crash report system +- Bug fixes diff --git a/src/changelog/v2.5.md b/src/changelog/v2.5.md new file mode 100644 index 0000000..f2f9e96 --- /dev/null +++ b/src/changelog/v2.5.md @@ -0,0 +1,54 @@ +## Version 2.5.4 (2015-12-14) + +- Fix background color in overflow menu of deck picker + +## Version 2.5.3 (2015-12-14) + +- Fix floating action button (blue +) interfering with deck list on Android 2.3 +- Fix opening apkg files from Gmail +- Fix automatic playback of consecutive videos +- Add a new launch screen +- Improve behaviour surrounding the deck overview screen +- Multiple media files can now be added to one field in the note editor +- Don't include unused media files on export +- Undo behaviour is now consistent with the desktop client (can no longer undo note edits) +- Enhancements to sync canceling +- Minor performance enhancements, crash fixes, and UI tweaks + +## Version 2.5.2 (2015-12-04) + +- Fix start-up crashes on Samsung devices running Android 4.2 +- Fix crash for new users on Android 6.0 +- Reverted to old typing method. The new method is now an option which is off by default. +- You can now click on the numbers in the right-most part of the deck list to open the deck overview screen +- Various fixes to transition animations and progress bars +- Add option to remove empty cards (previously only possible on desktop) +- Remove: Google Translate filter. In practice, this feature had no effect and is not required +- Remove: Google image search for multimedia card. The image search API has been discontinued by Google and no longer works + +## Version 2.5.1 (2015-12-01) + +- Fix crash when loading deck list (could not open collection bug) +- Fix visible progress bar showing when answering card + +## Version 2.5 (2015-11-30) + +- Redesign of user interface to use material design +- Add new dark theme +- Simplify the study process by bypassing deck overview screen +- Add ability to add, edit, delete note types +- Add setting to enable auto-sync and a Tasker intent to trigger sync +- Replace "instant add" feature with new API for 3rd party apps to add cards directly to AnkiDroid +- "Type in the answer" input box now built into the card html itself +- Make fullscreen-mode immersive and added setting to hide answer buttons when using gestures +- Add css class for customizing card background color when night mode is enabled +- Allow changing media volume from the deck picker +- Add ability to save and view common searches in the card browser +- Browser now shows full question and answer in the results by default +- Only show tags relevant to that deck when doing custom study by tag +- Fix some bugs in the widget +- Remove "simple interface" +- Remove support for Android version 2.1 and 2.2 (minimum is now 2.3.3) +- Add support for Android 6 Marshmallow +- Disable write-ahead-logging in sqlite database +- Many other bug fixes and small improvements diff --git a/src/changelog/v2.6.md b/src/changelog/v2.6.md new file mode 100644 index 0000000..a470bc2 --- /dev/null +++ b/src/changelog/v2.6.md @@ -0,0 +1,29 @@ +## Version 2.6.1 (2016-07-08) + +- Add card cycling in previewer (similar to desktop client) +- Add option to hide 'minutes left' in reviewer +- Fix language from app setting not always being used +- Fix not being able to play back new sound recording +- Fix potential crash on Android 2.3 (Gingerbread) +- Improved use of horizontal space when resizing large images +- Minor adjustment to black theme colors + +## Version 2.6 (2016-06-14) + +- Add two new themes (black, plain), selectable in preferences +- Make reviewer app bar icons customizable +- Split "hide / delete" menu in reviewer into "bury", "suspend", "delete note" +- Reviewer undo button now removes last stroke when whiteboard in use +- Add menu entry to change TTS language from reviewer +- Add more of the statistics available on the desktop client +- Add "advanced statistics" plugin (must be enabled in advanced settings) +- Add setting to configure custom sync server (advanced) +- Fix card templates created in AnkiDroid incorrectly using bold style +- Fix many importing issues (behavior now consistent with the desktop client) +- Fix long-tapping card in browser not always working +- Update sound playback button image +- Reduce size of whiteboard and gesture area for better interoperability with full screen +- Improve error messages with inaccessible collections +- Allow auto-play of HTML media elements (for templates that enable it) +- Significant updates to the content provider and API (for developers; see documentation) +- Many small bug fixes, improvements, theme adjustments, translation updates diff --git a/src/changelog/v2.7.md b/src/changelog/v2.7.md new file mode 100644 index 0000000..486b17a --- /dev/null +++ b/src/changelog/v2.7.md @@ -0,0 +1,11 @@ +## Version 2.7 (2016-10-16) + +- Add pull-to-sync feature +- Add option to place answer buttons at the top +- Add widget to directly access "Add note" screen +- Fix issue with importing whole collections and restoring backups +- Fix deck import failing after the first successful one +- Fix cards in learning queue not being randomized +- Fix crash with fullscreen mode and hidden answer buttons +- Fix rare crash when opening deck options +- Improve support with TalkBack diff --git a/src/changelog/v2.8.md b/src/changelog/v2.8.md new file mode 100644 index 0000000..278ea65 --- /dev/null +++ b/src/changelog/v2.8.md @@ -0,0 +1,35 @@ +## Version 2.8.4 (2018-04-27) + +- Fix error syncing due to too many card templates + +## Version 2.8.3 (2017-11-10) + +- Fix crash adding a picture from camera +- Fix add note icon disappearing in browser after search +- Fix translations from Glosbe +- Fix crash long-tapping when no deck is selected +- Fix crash entering advanced settings on some devices +- Fix incorrect graph display in statistics +- Fix deck not changing properly in statistics +- Fix rounding error in statistics weekly breakdown +- Fix spurious new deck created on model rename +- Improve error message on exception during media sync +- Improve animation when transitioning between screens +- Use a round icon on devices that support it + +## Version 2.8.2 (2017-02-28) + +- Fix bugs showing confirmation dialogs in various places +- Fix uncommon crash showing dialog after sync + +## Version 2.8.1 (2017-02-06) + +- Allow sending exported apkg to arbitrary app (e.g. Google Drive) +- Allow AnkiWeb to display a warning on sync completion +- Fix potential full-sync after sync cancellation +- Fix media sync sometimes scanning all files again +- Fix removing $ character when importing media files +- Improve automatic card answer timing when audio is played +- Improve rendering of some statistics +- Fix some crashes in the Russian, Vietnamese, and Chinese translations +- Fix crash sending exported apkg by email. NB: Export path can no longer be modified. diff --git a/src/changelog/v2.9.md b/src/changelog/v2.9.md new file mode 100644 index 0000000..dd05ddb --- /dev/null +++ b/src/changelog/v2.9.md @@ -0,0 +1,132 @@ +## Version 2.9.7 (2020-04-30) + +- Fix crash / workaround deck options timer config regression in AnkiDesktop + +## Version 2.9.6 (2020-04-03) + +- Fix multimedia crashes (permissions handling, image add, preview) +- Fix UI and crashes in database check (user dialog + exception handling) +- Fix Windows 10 image compatibility issue with image paths +- Fix AnkiDesktop sync compatibility issue if more than 1000 cards due +- Fix crash in card browser render +- Fix parsing of image tags in card browser +- Fix crash in StudyOptionsFragment +- Fix issue with deck options group changing on export +- Fix issue with exports containing unexpected media +- Fix issue with dynamic decks (crash fix, export fix) +- Fix high frequency issue "AnkiDroid directory is inaccessible" +- Fix high frequency WebView (card viewer) crash +- Add columns to card browser (due, ease, changed, created, edited) +- Fix card scheduler not respecting maximum intervals +- Fix card browser spins forever on images or empty strings + +## Version 2.9.5 (2020-03-15) + +- Fix crash rendering card list while updating card browser search +- Fix case-sensitivity issue with pronunciation words not being found +- Fix crash caused by auto-sync on startup showing dialog too soon +- Fix crash on preview of TTS cards showing language selectiond dialog too slowly +- Fix crash on import if collection not found +- Fix Anki ecosystem deck configuration issue for Anki Desktop users <= 2.16 +- Fix crash if user attempts to open camera or gallery and no app is available +- Fix crash building deck reminders while deck is synchronizing +- Fix crash related to audio recording stop +- Show helpful messages if import fails because device is out of space +- Fix crash when taking pictures on devices with Lollipop and older + +## Version 2.9.4 (2020-02-18) + +- Fix crash when fetching pronunciations in note editor +- Fix issue with pronunciation words not being found +- Fix crash on startup for users with auto-sync on startup +- Fix crash on deck import when app is in background +- Fix crash for users of Google Chrome Canary +- Fix crash when adding certain audio clips +- Fix crash related to fetching Sound metadata +- Fix issue where audio plays twice + +## Version 2.9.3 (2020-02-09) + +- Fix issues with connection timeouts and new encryption library +- Fix incorrect handling of decks with ':::' in their name + +## Version 2.9.2 (2020-02-03) + +- Add support for new AnkiWeb encryption changes +- Fix some bugs using filtered decks +- Fix crash on app startup with uninitialized collection +- Fix some issues with new cloze deletion menu +- Fix issue with Mathjax + cloze deletion +- Fix incorrect intervals bug with new scheduler +- Add various patches from Anki Desktop + +## Version 2.9.1 (2019-10-16) + +- Fix crash reviewing on Android 5 - 7 +- Fix crash on Hungarian translation + +## Version 2.9 (2019-10-14) + +- Change to new adaptive icon +- Add multi-select in the card browser (delete, change deck, reschedule) +- Add support for new Anki 2.1 scheduler +- Add support for Mathjax +- Add ability to add local audio files to notes +- Add ability to specify filename and folder on export and import +- Add ability to insert cloze in Note Editor +- Add ability to reposition cards +- Add ability to use due reminders for specific decks +- Add support for gamepad input when reviewing +- Add support for common keyboard shortcuts from Anki Desktop +- Add ability to search in Card Browser for text from system context menu +- Add ability to recognize tts HTML elements in questions and answers +- Add ability to display LaTeX rendered to SVG (vs PNG) from Anki Desktop +- Add confirmation check for full sync trigger in preferences +- Fix excessive pull-to-sync false positives. Disable when not at top of page. +- Fix some issues with focus in Note Editor +- Fix media sync errors related to file creation issues +- Fix crash related to use of camera without permission or no camera hardware +- Fix crash related to Card Browser allowing preview with no cards selected +- Fix crash in Reviewer when collection inaccessible +- Fix crash related to TTS when TTS not initialized +- Fix crash related to sdcard mount/unmount on inaccessible collection +- Fix crash related to audio button being visible after loading pronunciation media +- Fix crash when attempting to import invalid zip files +- Fix crash related to switching from split-window mode to single-window mode +- Fix crash related to missing preferences in Preference editor +- Fix crash on deck selection after deleting a deck and immediately closing app +- Fix crash in Reviewer when non-standard browser installed +- Fix type-answer field showing unexpectedly after undo in Reviewer +- Fix incorrect display of some characters when using type-answer +- Fix error related to media in subfolders not showing in Reviewer +- Fix some issues with generated flashcard html and CSS selectors +- Fix some Glosbe and Beolingus regressions +- Fix issue where new deck was created when note type was renamed +- Fix add note button disappearing from Card Browser when returning from search +- Fix some statistics display issues +- Fix incorrect display of some preferences +- Fix invisible notification bar in NoteEditor +- Fix newline characters not working in cloze deletions +- Increase max card count display from 1000 to 99999 +- Improve display handling of very long review intervals (> 68 years) +- Improve next/back buttons when using Previewer on multiple cards +- Improve handling of selected deck between statistics, card browser and deck picker +- Improve Card Browser search by restoring when returning from other activities +- Improve card focus handling when moving between Note Editor and Card Template Editor +- Improve labeling of deck-group vs deck-specific options +- Improve formatting of HTTP error codes during sync +- Improve handling of multi-touch events while whiteboard displayed +- Improve permission dialog descriptions +- Improve handling of "preview new cards" setting when creating custom study deck +- Improve Navigation Drawer performance on older devices +- Improve database check dialog with addition progress updates during check +- Use different notification channels for study reminders and general notifications +- Drop support for Android < Ice Cream Sandwich MR1 (API15, Android 4.0.3) +- Add support for more features on Chromebook (import, export, restore backup, camera) +- Add API support for card/note bury and suspend +- Add API to open Reviewer on specific decks from other apps +- Add support for HTML/Javascript debugging +- Add link to third party apps which support AnkiDroid API in advanced preferences +- Fix issue with custom sync server certificates +- Perform basic DB integrity check on app upgrade +- Introduce optional analytics reporting diff --git a/src/contributing.md b/src/contributing.md new file mode 100644 index 0000000..a7ae6fe --- /dev/null +++ b/src/contributing.md @@ -0,0 +1,20 @@ +# Contributing to AnkiDroid + + + +AnkiDroid is an open source project, and its development relies on contributions from volunteers. Here are some of the ways you can contribute to the AnkiDroid project: + +### Get involved + +Rate the app, join the [AnkiDroid forum](https://groups.google.com/g/anki-android) and answer questions for other users, submit bug reports, become a [beta tester](beta-testing.md), etc. More detailed information on ways you can contribute as a non-developer can be found on the [Wiki](https://github.com/ankidroid/Anki-Android/wiki/Contributing). + +### Translate + +Translations of AnkiDroid and this user manual are all contributed by users, and are greatly appreciated. +See the translating wiki page for detailed instructions on how to contribute translations. + +### Develop + +The source code for AnkiDroid is available on our main [Github page](https://github.com/ankidroid/Anki-Android), and bug fixes as well as new features are very welcome. +Before investing a lot of time on working on a new feature, you may like to ask on the forum first if it's likely to be merged into the main project, as not all features will be accepted. +If you are just getting started with Android programming, feel free to ask on the forum for some tips and/or tasks which are suitable for beginners. diff --git a/src/deck-overview.md b/src/deck-overview.md new file mode 100644 index 0000000..382600a --- /dev/null +++ b/src/deck-overview.md @@ -0,0 +1,39 @@ +# Deck Overview Screen + + + +![deck_overview.png](img/3-deck_overview.png) + +From the deck list, if you tap the counts area you will be taken to the deck overview screen. On tablets it is always shown in the area to the right of the deck list. + +On this screen you can view a summary of the deck, build custom study sessions, rebuild / empty filtered decks, and change deck options. When visible, pressing the study button will take you to the study screen for that deck. + +## App bar + +The icons that are shown in the app bar depend on whether your deck is an ordinary deck or a filtered deck. + +### Ordinary decks + +#### Custom Study + +Tapping the wrench icon allows you to create a custom session, for example to do extra reviews outside your normal schedule, or study only certain cards inside a deck. See the [filtered deck section](filtered-deck.md) for more information on this. + +### Filtered decks + +#### Empty deck + +Tapping the cross icon will empty all of the cards in the current filtered deck (i.e. return them to their original deck). + +#### Rebuild deck + +Tapping the rebuild icon will rebuild the current filtered deck according to the settings specified in filtered deck options. + +### Overflow menu + +#### Deck Options + +Allows you to configure some options related to the current deck, such as the number of new cards and reviews to introduce each day. Please see the [desktop documentation](https://docs.ankiweb.net/deck-options.html) for more information about these study options. + +#### Unbury + +This option is only visible when the selected deck has cards that have been manually or automatically buried. diff --git a/src/deck-picker.md b/src/deck-picker.md new file mode 100644 index 0000000..6b94f66 --- /dev/null +++ b/src/deck-picker.md @@ -0,0 +1,159 @@ +# The Deck List + + + +**Note:** _This section onwards assumes you understand what [decks and cards](https://docs.ankiweb.net/getting-started.html#key-concepts) are_ + +The deck list is the screen you see when you start AnkiDroid. It displays a list of the decks which contain all of your flashcards, and allows you to perform various actions: + +![decks.png](img/1-decks.png) + +## Add button + +The big blue + button in the bottom right corner is used to add new material to AnkiDroid. Pressing it expands to give the following three options, which are also described in the [tutorial video](https://www.youtube.com/watch?v=F2K1gOSdIZA). + +### Add + +Choose this option if you want to create your own flashcards (notes) with AnkiDroid. "Notes" and "cards" have specific meanings in Anki, which are [explained in the main Anki manual](https://docs.ankiweb.net/getting-started.html#key-concepts). Please see the tutorial video for a quick introduction to adding notes, or refer to the [adding notes](adding-notes.md#add-note-screen) section below for more detailed information. + +### Get shared decks + +To download a deck of cards from the internet that another user has contributed: + +1. Ensure you're connected to the internet. +2. Tap + and then **Get shared decks**. AnkiWeb will open. +3. Select a category, or type in a search. +4. Tap **Info** on a deck you'd like to study. +5. Scroll down and tap **Download**. +6. You browser will download the file and display a `download complete` notification. + Tap this button. +7. AnkiDroid will appear, and show a confirmation dialog. Tap the **Add** button. +8. When the import completes, your deck should be ready to study. + +### Create deck + +To create a new empty deck: + +1. Tap the **+** button and choose `Create deck` +2. Choose a name for the deck, for example `New Japanese` +3. Add cards to it following the `Add` instructions above + +## App Bar + +At the top of each screen in AnkiDroid is the App Bar, with buttons for performing various actions. +The following actions are available from the app bar in the deck list: + +### Navigation menu button + +Tapping the icon on the far left will show the [left navigation menu](drawer.md#navigation-drawer) for quickly navigating between the main parts of the app. + +### Sync button + +The circular button with arrows on the right is for synchronizing your cards with the cloud, as described in the [adding decks from cloud](anki-desktop.md#using-anki-desktop-with-ankidroid) section. + +### Overflow menu button + +On the far right is the overflow menu which contains less commonly used actions. These actions are described further below. + +**Hint:** long tapping on a button in the app bar anywhere in the app will display a textual hint describing what the button does! + +## Studying a Deck + +To study the cards in a deck, simply tap on the deck name (or the "STUDY" button on a 10" tablet), and AnkiDroid will switch to study mode. + +Note that the currently selected deck is highlighted with a grey background, and if you have any [filtered decks](filtered-deck.md#filtered-decks) they will be highlighted using a blue font. Filtered decks are discussed elsewhere in the manual. + +## Other Deck Actions + +Long tapping on a deck will show a list of other actions available to perform on that deck: + +### Rename deck + +Use this option to rename a deck + +### Deck options + +Tapping on deck options allows you to configure various deck specific study options. +Please see the [desktop documentation](https://docs.ankiweb.net/deck-options.html) for more information about these study options. + +### Custom study + +Allows you to choose from some convenient presets for studying outside of your normal schedule, for example increasing the study limit for the day. See the section on [filtered decks](filtered-deck.md#filtered-decks) for more detailed information. + +### Delete deck + +Use this option to delete a deck (note: this action is not reversible, although you can [restore from a backup](backups.md#automatic-backups) + +### Export deck + +This option can be used to share a deck with other users. See the [exporting decks](exporting.md#exporting-anki-files) section for more information. + +### Unbury + +This option is only visible when the selected deck has cards that have been manually or automatically buried. + +### Rebuild / Empty + +If the selected deck is a [filtered decks](filtered-deck.md#filtered-decks) then you also have the option to rebuild or empty the cards in it. + +#### Clickable areas on the decks + +Each deck in the list has three clickable areas: + +### Deck expander + +If you are using [subdecks](https://docs.ankiweb.net/getting-started.html#decks), then a deck expander button may appear on the far left of the deck, which can be used to show / hide the subdecks. A ▶ icon means the deck has hidden subdecks which can be shown, a ▼ icon means the deck has visible subdecks that can be hidden, and no icon means that the deck has no subdecks. + +**Note:** subdecks can be created by using the naming convention `PARENT::CHILD`. + +### Deck name + +This is the main clickable area, which will take you to the study screen if there are cards available to review. + +### Count buttons + +The count buttons on the far right of each deck act as a separate clickable area that takes you to the deck overview instead of the study screen. This can be useful if you want to quickly view the number of cards available in the deck. + +## Advanced Actions + +Some additional actions are located in the overflow menu for less common tasks, which are summarized below: + +### Undo + +After reviewing the last card in a study session, you can undo it from here. + +### Check database + +This can automatically fix a lot of problems with your database, and will also purge any unused tags. If you experience any problems with your collection, this is the first action you should try. + +> **NOTE:** Under some circumstances, check database will move cards to a deck named _!Recovered Cards_. If this occurs, please move the cards to an appropriate deck via the [card browser](browser.md#findingsearchingbrowsing), and delete _!Recovered Cards_ when it is empty. + +### Check media + +Try to run this if you experience any issues with media syncing. + +### Empty cards + +Remove any empty cards from your collection. See the [desktop documentation](https://docs.ankiweb.net/templates/generation.html#card-generation--deletion) for more. + +### Restore from backup + +Allows you to restore from one of AnkiDroid's [automatic backups](backups.md#automatic-backups) + +### Manage note types + +Allows you to add, edit, and delete note types. See the [customizing card layout](advanced-features/customizing-card-layout.md) section for more help with this advanced feature.Keyboard Shortcuts + +### Import + +Import a .apkg anki file containing a deck. See the [importing](importing/importing-anki-files.md) section for more. + +### Export collection + +Export entire collection as a collection.apkg file. See the [exporting](exporting.md) section for more. + +## Deck Counts + +Next to each deck, three numbers are displayed. The left, blue number, corresponds to how many new cards you have to learn today. Anki will introduce 20 new cards a day by default, and you can customize this number if you'd like. The red number in the middle is for the cards due to be studied today which are currently in the learning phase, and the green number is the cards which are due for review (i.e. cards which have already graduated from the learning phase). On a deck you've never studied before, these numbers will both be zero. + +As explained above, tapping on the counts will take you to the deck overview screen. diff --git a/src/drawer.md b/src/drawer.md new file mode 100644 index 0000000..a1019eb --- /dev/null +++ b/src/drawer.md @@ -0,0 +1,35 @@ +# Navigation Drawer + +![navigation_drawer.png](img/2-navigation_drawer.png) + +The navigation drawer can be opened from most places in the application by pressing the left menu icon, +or alternatively swiping outwards from anywhere on the far left side of the screen. It is used +for quickly navigating between different parts of the application. You can switch to the following screens: + +### Decks + +Takes you to the top level of the app where the list of cards are shown ([more info here](deck-picker.md)) + +### Card Browser + +Shows a list of all your cards ([more info here](browser.md)) + +### Statistics + +Helps you track your study progress ([more info in Anki manual](https://docs.ankiweb.net/stats.html#statistics) and [here](advanced-features/advanced-statistics.md)) + +### Night mode + +This switches the app to a dark theme which many users find is less straining on the eyes, particularly when reviewing in the dark. See the wiki for instructions on how to customize the card background and font color used in night mode. + +### Settings + +Allows you to customize the app ([more info here](settings.md)) + +### Help + +Opens this web page + +### Send feedback + +Get support from the AnkiDroid team diff --git a/src/editing-notes.md b/src/editing-notes.md new file mode 100644 index 0000000..508d361 --- /dev/null +++ b/src/editing-notes.md @@ -0,0 +1,32 @@ +# Edit Note Screen + +The edit note screen can be opened by choosing edit while reviewing, or by opening a card in the browser. The edit screen is similar to the add new note screen mentioned above, with some key differences: + +- Changing the deck operates on the selected card (which is underlined in the **Cards** box). + If a note type is chosen which has more than one card, only the currently selected card will be moved to the new deck. + +- Changing the **Type** dropdown selector changes to the note type edit mode. In this mode, editing the content of the note (i.e. deck, fields, etc) is disabled, + and if a custom note type with more than two fields is being used, additional buttons will appear which let you control the mapping of the fields to the new note type. + +If a note type is selected which has less cards than the original note type, only the first n cards will be kept. For example changing from **Basic (and reversed card)** to **Basic** +will lead to only the first card being kept. To warn you of this, the text in the **Cards** box will appear red, and a confirmation dialog will be shown before the note is saved. + +> Hint: to change the type for multiple notes in one go, or to customize the mapping between cards, use the **Change note type** option in the browser on Anki Desktop. + +There are also several advanced options available in the main menu: + +### Add note + +Create a new empty note + +### Copy card + +Copy the current note to a new editable note + +### Reset progress + +Move the card to the end of the new card queue. The current state of the card is cleared, but not its revision history. + +### Reschedule + +Allows you to reschedule as a review card on a given date. This is useful if you have imported already-learnt material, and you want to start it off with higher initial intervals. diff --git a/src/exporting.md b/src/exporting.md new file mode 100644 index 0000000..a7e5b95 --- /dev/null +++ b/src/exporting.md @@ -0,0 +1,35 @@ +# Exporting Anki Files + +AnkiDroid can export your flashcards in the .apkg Anki file format so that you can import them into Anki Desktop, or share them with other people. +As in Anki Desktop, you can either export a [collection package or deck package](https://docs.ankiweb.net/exporting.html#packaged-decks), depending on what you are trying to achieve. + +There are two export options available: **include scheduling information** and **include media**. Generally the default options are sufficient, if you choose not to include scheduling information, Anki will assume that you are sharing the deck with other people, and will remove marked and leech tags so that they will have a clean copy of it. + +## Exporting collection package + +When exporting for use in Anki Desktop, you generally want to [export your entire collection](https://docs.ankiweb.net/exporting.html#collection-colpkg), including all your review history etc. + +From the main menu in the decks screen: + +1. Tap the **Export** item in the menu. +2. Tap **OK** using default options +3. Tap **OK** again to email the exported collection.apkg file to yourself, or alternatively you can manually copy to your computer using USB + +To import the file on your computer: + +1. Save the file **collection.apkg** to your desktop +2. Double-click on the file to start Anki. +3. Confirm you wish to replace, so that the deck from your mobile device + overwrites the old data on your desktop. +4. After importing, you can delete the apkg file on your desktop if you wish. + +## Exporting deck package + +If you want to share a deck in AnkiDroid with another user, you can export a deck package. + +From the main menu in the decks screen: + +1. Long tap on the deck you wish to export +2. Tap **Export** +3. Tap **OK** using the default options +4. Tap **OK** again to email the exported apkg to another user diff --git a/src/filtered-deck.md b/src/filtered-deck.md new file mode 100644 index 0000000..0a7dee3 --- /dev/null +++ b/src/filtered-deck.md @@ -0,0 +1,13 @@ +# Filtered Decks + +Anki is designed to optimize the learning process, so that you study the minimum amount necessary to remember the majority of your cards. Once the congratulations screen is reached, further study becomes a case of diminishing returns: the amount of extra time spent going over the same cards again is generally not worth the moderate increase in retention you'll see. + +That said, if you have a test looming, or simply want to pass some time, it's possible to keep reviewing even after you are shown the congratulations message. + +A **filtered deck** is a temporary deck that contains cards based on various criteria, such as **forgotten today**, `is tagged 'hard'`, and so on. After studying cards in a filtered deck, or when the filtered deck is deleted, the cards are automatically returned to their original deck. + +The easiest way to create a filtered deck is by long clicking on a deck and choosing the **custom study** option. + +Advanced users can create a filtered deck manually, by choosing **Create filtered deck** from the overflow menu in the deck list screen. + +For further information on filtered decks, please see the [desktop documentation](https://docs.ankiweb.net/filtered-decks.html#filtered-decks--cramming). diff --git a/src/gestures.md b/src/gestures.md new file mode 100644 index 0000000..a8bd3a1 --- /dev/null +++ b/src/gestures.md @@ -0,0 +1,224 @@ +# Gestures + + + +AnkiDroid allows you to customize the interface, so that actions you perform +frequently can be accomplished quickly by using tap and swipe gestures. + +### Actions + +The following gestures can be used: + +- Swipe up +- Swipe down +- Swipe left +- Swipe right +- Double touch +- Touch top +- Touch bottom +- Touch left +- Tough right + +The following actions are available for each gesture: + +#### No action + +Don't do anything. Useful if you want to disable certain swipes, tap zones and so on. + +#### Answer button 1 + +When the answer screen is shown, choose the red +button, indicating you wish to review the card again soon. This is useful when +you forgot a card or wish to review it more frequently. +When the question is shown, this action (and all other answer actions below) will simply show the answer. + +#### Answer button 2 + +When the answer screen is shown, choose the second button from the left, +generally indicating you found the card hard to remember. + +#### Answer button 3 + +When the answer screen is shown, choose the third button from the left. + +#### Answer button 4 + +When the answer screen is shown, choose the fourth button from the left (when applicable). + +#### Answer recommended (green) + +When the answer screen is shown, choose the green button. +This is the button you should end up using the most. + +#### Answer better than recommended + +When the answer screen is shown, choose the button on the +right, indicating you found the card too easy to remember and would like a +much longer delay. + +#### Undo + +Undoes the last action. + +#### Edit card + +Edits the current card. + +#### Mark + +Adds a tag called **Marked** the current note, so it can be easily found in a search. + +#### Lookup expression + +When the lookup feature is enabled (in advanced settings), lookup an expression +in the selected dictionary. Note: the expression needs to be copied to the clipboard before this action will work. + +#### Bury card + +Hides the current card from review. + +#### Suspend card + +Prevent current card from being shown during review until you unsuspend it via the card browser. + +#### Delete note + +Deletes the currently shown note and all of its cards. + +#### Play media + +Replay any audio on the card. + +#### Abort learning + +Stop reviewing and go back to the deck overview page. + +#### Bury note + +Bury the current note (i.e. hide it until the next day). + +#### Suspend note + +Suspend the current note (i.e. hide it until you unsuspend it). + +#### Toggle Red Flag + +Enables the red flag, unless the flag is already red, in which case the flag is disabled. + +#### Toggle Orange Flag + +Enables the orange flag, unless the flag is already orange, in which case the flag is disabled. + +#### Toggle Green Flag + +Enables the green flag, unless the flag is already green, in which case the flag is disabled. + +#### Toggle Blue Flag + +Enables the blue flag, unless the flag is already blue, in which case the flag is disabled. + +#### Remove Flag + +Removes the flag from the card. + +## Advanced + +Some less common features for advanced users are shown here + +#### Collection path + +Change the location where AnkiDroid's data is stored (not recommended) + +#### Force full sync + +Tap this item to force a full upload or download on the next sync (for example, because you accidentally deleted a deck on one side and want to restore the deck rather than having its deletion synchronized). + +#### Advanced Statistics + +Take into account the effect of future reviews in the **Forecast** graph. More info [here](advanced-features/advanced-statistics.md). + +### Workarounds + +#### Type answer into the card + +If you have set up your cards to ask you to type in the answer (as explained in [this section of the desktop manual](https://docs.ankiweb.net/templates/intro.html)), AnkiDroid will display a keyboard on such cards and allow you to check your answer. + +In order to improve user experience when working with the whiteboard and gestures, we use a typing box separate from the card, which is inconsistent with the way the feature works on Anki Desktop. + +For full consistency with Anki Desktop, you can enable this option which allows you to save screen area, and choose an appropriate font (e.g. Japanese vs Chinese) for the input box. + +#### Input Workaround + +Some older devices couldn't gain focus into the text input box for typed-answer fields, so this was added (Hidden for API > 14). + +#### Longclick Workaround + +Some older devices couldn't detect longclick for initiating selecting/copying of text, so this was added (Hidden for API > 10). + +#### Fix for Hebrew Vowels + +Some older devices couldn't render Hebrew text, so this feature was added which allows the user to download and install a Hebrew font which is known to work (Hidden for API > 15). + +#### Text to Speech + +Enable this option to have Android read out all the text on your flashcards using the default text to speech engine. Google's built-in TTS engine should work; 3rd party TTS engines may or may not. +AnkiDroid will ask you to select the language for the front and back of your cards once for each deck on the first time you review a card in that deck. +To change the language or disable TTS for a given deck after making your initial choice, you'll need to use the **reset languages** option described below and reconfigure for each deck. + +Alternatively, if you want only fragments of cards to be read aloud, or if you want to set the TTS language for multiple decks at once, you can insert `` tags into [card templates](advanced-features/customizing-card-layout.md). For example, with the following template for the back of the card + +```html +{{FrontSide}} + +
+ +{{EnglishTranslation}} +

+{{Example}} +``` + +only the `EnglishTranslation` field will be read aloud in a British English voice; the `Example` field, lying outside the `` tag, won't be read aloud. Every `` tag needs to have the following two attributes: + +- **`service`**: should be set to **`android`**, otherwise the contents of the **``** tag won't be read aloud; +- **`voice`**: used to select the TTS language; should be a [two- or three- letter language code](https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes), optionally followed by an underscore and a [two-letter country or region code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2). A frequently updated list of languages supported by the Google TTS engine can be found on its [Wikipedia page](https://en.wikipedia.org/wiki/Google_Text-to-Speech). + +To make both AnkiDroid and the [AwesomeTTS](https://ankiatts.appspot.com) plugin to the desktop application use a TTS engine to read aloud certain card fragments, put the `` tag inside the `` tag recognised by AwesomeTTS, or vice versa. An example: + +```html + + + {{EnglishTranslation}} + + +``` + +AnkiDroid automatically ignores `` tags selecting an unknown TTS service. In contrast, AwesomeTTS may display a warning message on encountering the `` tag; to suppress it, uncheck the two _Show errors_ checkboxes on the _Playback_ tab of the _AwesomeTTS: Configuration_ dialog in the desktop application. + +_This feature may be removed in the future in favor of a separately downloadable plugin._ + +#### Lookup Dictionary + +Dictionary to use to lookup words copied to the clipboard in the reviewer. After setting up a dictionary, do the following to perform the lookup: + +- Longclick on the text you want to copy in the reviewer +- After selecting the word you want to copy, press the **copy** icon in the app bar at the top of the screen +- Tap once anywhere on the flashcard +- A magnifying glass icon should appear, which performs the lookup when clicked + +Alternatively, the lookup action can be performed via a gesture. + +_This feature will likely be removed in the future in favor of a plugin_ + +#### Reset Languages + +Useful for resetting the TTS language + +#### eReader (up/down buttons) + +Support for eReader hardware buttons (see [issue 1625](https://github.com/ankidroid/Anki-Android/issues/1625)) + +_This feature will likely be removed in the future in favor of a plugin_ + +#### eReader Double Scrolling + +Double the scrolling distance when using the eReader hardware buttons diff --git a/src/getting-started.md b/src/getting-started.md new file mode 100644 index 0000000..314d27d --- /dev/null +++ b/src/getting-started.md @@ -0,0 +1,7 @@ +# Getting started + +To start using AnkiDroid, we need to add some cards to study. From the main screen, tapping the big blue plus button will allow you to either add a new **note** (i.e. create new flashcards), download shared decks (decks that other people have created and shared online), or create new empty decks. + +Please watch this 5 minute [tutorial video](https://www.youtube.com/watch?v=F2K1gOSdIZA), which gives an introduction to adding, downloading, and studying cards in AnkiDroid. More detailed information can be found in the sections below. + +If you are an existing user of Anki Desktop wishing to import your decks from the computer, you might like to skip straight to the [using AnkiDroid with Anki Desktop](anki-desktop.md#using-anki-desktop-with-ankidroid) section. diff --git a/src/help.md b/src/help.md new file mode 100644 index 0000000..394eede --- /dev/null +++ b/src/help.md @@ -0,0 +1,39 @@ +# Help & Support + +## Before Asking + +Before asking for help, please try searching through the [AnkiDroid Manual](intro.md), the list of [Frequently Asked Questions](https://github.com/ankidroid/Anki-Android/wiki/FAQ), and also the main [Anki Manual](https://docs.ankiweb.net) for general help with the Anki system and features, and any issues not limited to Android. + +## Support + +If you were unable to find what you needed in the documentation above, please visit the relevant site below: + +### Non-Android-Specific Issues + +AnkiDroid (the Android version of Anki) is created and managed independently from other Anki versions. For the PC / Web / iOS versions, and general Anki issues that are not limited to Android, please visit the main [Anki support site](https://forums.ankiweb.net). + +### AnkiDroid Questions + +For questions and help concerning AnkiDroid, please visit the [user forum](https://groups.google.com/g/anki-android), or you can send your questions to the forum's [public email address](mailto:public-forum@ankidroid.org) if you don't want to register on the forum. + +### Bug Reports and Feature Requests + +For bug reports and feature requests, please search through the current list of open issues on the [AnkiDroid issue tracker](https://github.com/ankidroid/Anki-Android/issues), and if there are no existing issues, create a new issue including as much information as possible. +For bug reports, please also include the output of **debug info** by following the steps below: + +1. Open the navigation drawer by tapping the button on the top left of the screen +2. Tap **settings** +3. Tap **advanced** +4. Tap **about AnkiDroid** at the bottom +5. Tap the **copy debug info** button at the bottom (which copies **debug info** to the clipboard) +6. If filling out the bug report on your mobile device, paste the contents of the clipboard directly to the issue. Alternatively, you can paste the contents of the clipboard into a new email, send it to yourself, then copy and paste that into the bug report from your computer. + +![DebugInfo.png](img/DebugInfo.png) + +**Note:** if you are unable to open the app at all, so cannot even access **settings** then please follow [these instructions](https://github.com/ankidroid/Anki-Android/wiki/Unopenable-collections). + +This **debug info** is important as it allows us to match your report with our internal crash report data. + +### Contributing to AnkiDroid + +AnkiDroid is an open source project, and anyone is welcome to contribute (including non-developers)! For help with contributing to AnkiDroid, please first check the [contribution wiki page](https://github.com/ankidroid/Anki-Android/wiki/Contributing), and ask any further questions in the [main forum](https://groups.google.com/g/anki-android). diff --git a/img/1-decks.png b/src/img/1-decks.png similarity index 100% rename from img/1-decks.png rename to src/img/1-decks.png diff --git a/img/2-navigation_drawer.png b/src/img/2-navigation_drawer.png similarity index 100% rename from img/2-navigation_drawer.png rename to src/img/2-navigation_drawer.png diff --git a/img/3-deck_overview.png b/src/img/3-deck_overview.png similarity index 100% rename from img/3-deck_overview.png rename to src/img/3-deck_overview.png diff --git a/img/4-reviewer.png b/src/img/4-reviewer.png similarity index 100% rename from img/4-reviewer.png rename to src/img/4-reviewer.png diff --git a/img/5-adding.png b/src/img/5-adding.png similarity index 100% rename from img/5-adding.png rename to src/img/5-adding.png diff --git a/img/6-browser.png b/src/img/6-browser.png similarity index 100% rename from img/6-browser.png rename to src/img/6-browser.png diff --git a/img/AlphaTestJoinGroup.png b/src/img/AlphaTestJoinGroup.png similarity index 100% rename from img/AlphaTestJoinGroup.png rename to src/img/AlphaTestJoinGroup.png diff --git a/img/AnkiDesktop.png b/src/img/AnkiDesktop.png similarity index 100% rename from img/AnkiDesktop.png rename to src/img/AnkiDesktop.png diff --git a/img/DebugInfo-ru.png b/src/img/DebugInfo-ru.png similarity index 100% rename from img/DebugInfo-ru.png rename to src/img/DebugInfo-ru.png diff --git a/img/DebugInfo.png b/src/img/DebugInfo.png similarity index 100% rename from img/DebugInfo.png rename to src/img/DebugInfo.png diff --git a/img/ReverseNoteType.png b/src/img/ReverseNoteType.png similarity index 100% rename from img/ReverseNoteType.png rename to src/img/ReverseNoteType.png diff --git a/src/importing/importing-anki-databases.md b/src/importing/importing-anki-databases.md new file mode 100644 index 0000000..42c9c8b --- /dev/null +++ b/src/importing/importing-anki-databases.md @@ -0,0 +1,14 @@ +# Importing Anki Databases (.anki2) + +AnkiDroid does not support directly importing Anki database (`.anki2`) files. A database import will replace your collection with the contents the provided file. If you want to perform a full replacement, you should import a `collection[.apkg/.colpkg]` created in the app with the export function. + +## Importing anki2 files manually + +This is not officially supported, but `.anki2` files can manually be imported if needed, in cases of troubleshooting for example: + +- Create a new folder on your Android file system +- Obtain the full path to the folder as provided by your file manager, this will typically appear as: `/storage/emulated/0/` +- Place the `.anki2` file in the newly created folder +- Rename the file to `collection.anki2` +- (If applicable) Temporarily log out of your AnkiWeb account: `Settings - AnkiDroid - AnkiWeb account` +- Open `Settings - Advanced - AnkiDroid Directory` and set the AnkiDroid Directory to the newly created folder. diff --git a/src/importing/importing-anki-files.md b/src/importing/importing-anki-files.md new file mode 100644 index 0000000..678ac54 --- /dev/null +++ b/src/importing/importing-anki-files.md @@ -0,0 +1,23 @@ +# Importing Anki Files + +You can import Anki files (with .apkg file format) directly into AnkiDroid. Other file formats cannot be imported directly into AnkiDroid, however flashcards from most other applications can be imported into Anki Desktop on your computer, which can then be [added into AnkiDroid in the usual way](../anki-desktop.md). +See the [importing section of the Anki Desktop manual](https://docs.ankiweb.net/importing/intro.html) for help on importing into Anki Desktop. + +As in Anki Desktop, AnkiDroid distinguishes between [the two types of .apkg files](https://docs.ankiweb.net/exporting.html) (**collection package** and **deck package**) based on the filename. Collection packages have the name **collection.colpkg**, and when imported will completely _replace all contents_ in AnkiDroid. Any apkg file which is **_not_** named something that ends in **.colpkg** will be treated as a deck package, which will be _merged with any existing content_ when imported into to AnkiDroid. + +You can import .apkg Anki collection files into AnkiDroid either by opening them using the standard Android system, or by manually importing them from within AnkiDroid: + +## Open the file using Android + +Apkg files are automatically associated with AnkiDroid, so for example if you open a .apkg email attachment which you sent to yourself, then AnkiDroid will automatically open the file and confirm if you want to import it. Simply click OK and the apkg file will be imported. + +## Import the file manually in AnkiDroid + +You can also manually import .apkg files as follows: + +- Connect your device to your computer using USB +- Copy the .apkg from your computer to the AnkiDroid folder on your device +- Open AnkiDroid on your device +- From the main menu in the deck list, choose _Import_ +- Choose the apkg file you just copied to your device when prompted +- Tap OK diff --git a/src/intro.md b/src/intro.md new file mode 100644 index 0000000..d7943db --- /dev/null +++ b/src/intro.md @@ -0,0 +1,9 @@ +# Introduction + +Thank you for using AnkiDroid, the Android client for the popular [Anki](http://ankisrs.net) spaced repetition system. + +Anki is spaced repetition technique which is simple but highly effective. It helps you memorize things by automatically repeating them across increasing intervals based on your responses with no need for you to keep track of what to study or when to study it. You create notes (or download shared decks) with content you need to memorize, and the scheduler will make sure you see the content when you need to. + +AnkiDroid is intended to be used in conjunction with Anki on your computer. While it is possible to function without it, some tasks are either only possible with, or a lot more efficient with Anki Desktop. Furthermore, it is **strongly recommended** to at least read [`Key Concepts`](https://docs.ankiweb.net/getting-started.html#key-concepts) section of the main Anki manual to understand the terminology used here. + +If this manual doesn't contain what you are looking for, please check the [AnkiDroid Wiki](https://github.com/ankidroid/Anki-Android/wiki) for a list of changes, instructions for submitting bug reports and feature requests, a list of frequently asked questions, and much more. diff --git a/src/keyboard-shortcuts.md b/src/keyboard-shortcuts.md new file mode 100644 index 0000000..f633bbf --- /dev/null +++ b/src/keyboard-shortcuts.md @@ -0,0 +1,65 @@ +# Keyboard Shortcuts + +## Home Screen + +| Shortcut | Purpose | +| ------------ | ------------ | +| A | Add Note | +| B | Card Browser | +| Y | Sync | + +## Reviewer + +| Shortcut | Purpose | +| --------------------------------------------------- | ---------------------------------------- | +| 1,2,3,4 | Press the nth answer button | +| Gamepad Y | Flip Card/Press the first answer button | +| Gamepad X | Flip Card/Press the second answer button | +| Gamepad B | Flip Card/Press the third answer button | +| Gamepad A | Flip Card/Press the fourth answer button | +| Space,Enter | Flip Card/Answer Good | +| e | Edit Note | +| * | Mark Note | +| - | Bury Card | +| = | Bury Note | +| @ | Suspend Card | +| ! | Suspend Note | +| r,F5 | Replay Media | +| z | Undo | + +## Note Editor + +| Shortcut | Purpose | +| ------------------------------------------------------------ | ------------------------------------------- | +| Ctrl+Enter | Save Note | +| D | Select Deck | +| L | Card Template Editor | +| N | Select Note Type | +| T | Edit Tags | +| Ctrl+P | Preview Note | +| Ctrl+B | Bold | +| Ctrl+I | Italic | +| Ctrl+U | Underline | +| Ctrl+R | Insert Horizontal Rule | +| Ctrl+H | Insert Title | +| Ctrl+F | Change Font Size | +| Ctrl+M | Insert MathJax Equation | +| Ctrl+Shift+C | Insert New Cloze Deletion | +| Ctrl+Alt+Shift+C | Insert Cloze Deletion using existing number | +| Ctrl+1..0 | Insert User-Defined HTML | + +## Card Browser + +| Shortcut | Purpose | +| ------------------------------------------- | ----------- | +| Ctrl+A | Select All | +| Ctrl+E | Edit Note | +| Ctrl+D | Change Deck | +| Ctrl+K | Mark Note | +| Ctrl+Alt+R | Reschedule | + +## Card Template Editor + +| Shortcut | Purpose | +| ---------------------------- | --------------- | +| Ctrl+P | Preview Changed | diff --git a/src/note-formatting-toolbar.md b/src/note-formatting-toolbar.md new file mode 100644 index 0000000..92746c3 --- /dev/null +++ b/src/note-formatting-toolbar.md @@ -0,0 +1,7 @@ +# Note Formatting Toolbar + +The note formatting toolbar contains basic text formatting buttons (Bold, Italic, Underline, Horizontal Line, Insert Title, Change Font Size, [Insert MathJax](advanced-features/mathjax.md) and Insert Cloze Deletion). + +It also allows the addition of user-defined toolbar buttons using HTML. HTML is a powerful language allowing nearly endless customization of your cards. [Our wiki](https://github.com/ankidroid/Anki-Android/wiki/Note-Editor-Toolbar-HTML-Samples) contains common code samples to get you started. + +A user-defined toolbar button can be removed by long pressing the button and selecting **Delete**. diff --git a/removed-features.asc b/src/removed-features.md similarity index 75% rename from removed-features.asc rename to src/removed-features.md index 2a22b0b..54ca61d 100644 --- a/removed-features.asc +++ b/src/removed-features.md @@ -1,18 +1,14 @@ -:docinfo1: -:experimental: +# Removed Features -= Removed Features -:sectanchors: - -== Automatic night mode color inversion +## Automatic night mode color inversion NOTE: Removed in AnkiDroid 2.17 -=== Feature Description +### Feature Description -Previously, AnkiDroid contained a very basic color inverter for card content in night mode. For example it changed white to black and black to white. It inverted *all* colors though for example green inverts to pink. These changes were frequently unwanted. +Previously, AnkiDroid contained a very basic color inverter for card content in night mode. For example it changed white to black and black to white. It inverted _all_ colors though for example green inverts to pink. These changes were frequently unwanted. -=== Reason for removal +### Reason for removal This feature was introduced in 2012, before either Android or Anki had night mode functionality. @@ -24,13 +20,12 @@ As color inversion was an unexpected feature for our users, and did not match An https://github.com/ankidroid/Anki-Android/issues/14893 -=== Action to take +### Action to take -If you are impacted by these changes, you may link:manual.html#customizingCardLayout[customize the CSS] of +If you are impacted by these changes, you may [customizing card layout](advanced-features/customizing-card-layout.md) of your card templates using the `night_mode` selector. The css: `filter: invert(1)` -[source,css] ----- +```css .card { --text-color1: black; } @@ -52,35 +47,35 @@ your card templates using the `night_mode` selector. The css: `filter: invert(1) .night_mode .title { filter: invert(100%); } ----- +``` -== Gesture Action: Answer better than recommended +## Gesture Action: Answer better than recommended NOTE: Removed in AnkiDroid 2.17 -=== Feature Description +### Feature Description When the answer screen is shown, choose the button on the right, indicating you found the card too easy to remember and would like a much longer delay. -=== Reason for Removal +### Reason for Removal Previous versions of the Anki Scheduler had a variable number of buttons. The V3 scheduler always has 4 buttons, so this option no longer has unique functionality. -=== Action to take +### Action to take The functionality is now equivalent to 'Answer easy', either reassign the action, or remove it. -== Gesture Action: Answer recommended (green) +## Gesture Action: Answer recommended (green) NOTE: Removed in AnkiDroid 2.17 -=== Feature Description +### Feature Description When the answer screen is shown, choose the green button. This is the button you should end up using the most. Previous versions of the Anki Scheduler had a variable number of buttons. The V3 scheduler always has 4 buttons, so this option no longer has unique functionality. -=== Action to take +### Action to take -The functionality is now equivalent to 'Answer good', either reassign the action, or remove it. \ No newline at end of file +The functionality is now equivalent to 'Answer good', either reassign the action, or remove it. diff --git a/src/reviewer.md b/src/reviewer.md new file mode 100644 index 0000000..abb845c --- /dev/null +++ b/src/reviewer.md @@ -0,0 +1,67 @@ +# Study Screen + +Tapping on the deck name from the deck list, or the study button from the deck overview screen will take you to the study screen where you do your study. + +![reviewer.png](img/4-reviewer.png) + +## Basics + +If you have not used Anki on a computer before, you may like to have a look at the first [intro video](https://docs.ankiweb.net/getting-started.html#videos) before reading on, as it explains the basic review process. + +On the top left of the screen you'll see three numbers. From the left, these correspond to new cards, learning cards, and cards to review. These are explained in more detail in the intro videos for the desktop program, so please [check them out](https://docs.ankiweb.net/getting-started.html#videos) if you haven't already. + +When you've looked at a card's question and remembered the answer, or decided you don't know it, tap the **show answer** button. When you do, the bottom area will change to display 2-4 answer buttons, depending on how you've answered the card previously. The buttons will display the time a card will next be shown, so 10m means **10 minutes** and **5d** means **5 days**. You can tap directly on these buttons to choose a particular answer. + +To make reviewing faster, you can configure gestures (for example taps and swipes) to answer cards without using the buttons. See the [preferences section](settings.md) for more information on configuring gestures. + +## App Bar + +The App Bar at the top of the study screen has several buttons for performing various common actions. The number of buttons which are shown is determined automatically by Android based on the size and resolution of your screen. If there is not enough space to show the button for a given action, then the action will be available from the menu instead. If you are unsure what a button does, you can long-tap on it to see the name of the action. The following action are available: + +#### Undo + +Undo the answer you chose for the last card you studied (button always shown). + +#### Mark Card + +Adds a **marked** tag to the current note, so it can be easily found in the browser. +This is useful when you want to take some action on the note at a later date, such as looking up a word when you get home. Marked cards also show a small star in the upper-right-hand corner during reviews. + +#### Flag Card + +Adds a color coded **flag** (red, orange, green, or blue) +This can be used as a general purpose indicator to differentiate your cards. Flags are represented by a number from 1-4, corresponding to the previously listed colors. + +#### Edit Card + +Open the edit note screen, where you can change the content displayed on the flashcard (see the [editing notes section](editing-notes.md) for more help) + +#### Hide / Delete + +Give options to bury, suspend, or delete the current note or card + +- **Bury card / Bury note:** Hides a card or all of the note’s cards from review until the next day. (If you want to unbury cards before then, you can choose “unbury” from the long-press menu in the [deck list](deck-picker.md), or from the [deck overview screen](deck-overview.md).) This is useful if you cannot answer the card at the moment or you want to come back to it another time. Burying can also happen automatically for cards of the same note. If cards were in learning when they are buried, they are moved back to the new card queue or review queue prior to being buried. +- **Suspend card / Suspend note:** Hides a card or all of the note’s cards from review until they are manually unsuspended (by long-tapping a card in the [card browser](browser.md)). This is useful if you want to avoid reviewing the note for some time, but don’t want to delete it. If cards were in learning when they are suspended, they are moved back to the new card queue or review queue prior to being suspended. +- **Delete note:** Deletes the note and all of its cards. + +#### Replay Audio + +If the card has audio on the front or back, it will be played again. + +#### Enable / Disable Whiteboard + +This action enables or disables the whiteboard feature for the current deck. The whiteboard feature allows you to draw on the screen, which is particularly useful for practicing drawing characters from languages such as Japanese. When the whiteboard has been enabled for the current deck, two new actions will become available for clearing and hiding the whiteboard. Disabling the whiteboard will hide these actions as well as the whiteboard itself. + +#### Deck options + +Open the deck specific study options. See the [desktop documentation](https://docs.ankiweb.net/deck-options.html) for more information about these study options. + +#### Check Pronunciation + +This action enables or disables the temporary audio recorder toolbar at the top of the card. This feature allows you to record your voice and replay it. It is used primarily to check your pronunciation. This toolbar is composed of three buttons: play, stop playing and record microphone audio. This tool can be used while viewing either the question or the answer. + +## Reaching the end of the study session + +When you've finished the cards that are due to be studied today, you'll be taken back to the decks list and shown a congratulations message. From here you can select a different deck, or if you've finished studying for the day, you can simply tap the home button in order to close AnkiDroid (and you can also do this in the middle of reviews if you wish). + +If you wish to keep studying the same deck further, tap on the deck again which will give you several options for continued study. Please see the [filtered deck](filtered-deck.md) section for more on custom study. diff --git a/src/rtl.md b/src/rtl.md new file mode 100644 index 0000000..d7b0687 --- /dev/null +++ b/src/rtl.md @@ -0,0 +1,17 @@ +# Using Right-To-Left Languages with AnkiDroid + +Anki and AnkiDroid have full support for RTL languages such as Arabic, Hebrew, and Persian. + +## Editing Fields as RTL + +Fields can be marked as RTL (currently possible only from Anki Desktop) for RTL editing. When a field is marked as RTL, then the text is right-aligned in editing fields and punctuation is correctly displayed at the end (left) of sentences. Text that contains blocks of LTR characters will be properly displayed as well, with the beginning of the sentence appearing to the right of the LTR block and the end of the sentence being displayed to the left of the LTR block. + +Directionality is especially important for editing and creating RTL cloze deletions as the cloze format includes both neutral and LTR markup characters. Therefore it is recommended to use a separate note type for LTR cloze deletions and RTL cloze deletions. + +## Displaying Fields as RTL during study + +To display a field as RTL, with proper right-alignment and directionality (punctuation at left of sentences, proper flow around LTR blocks), the field should be wrapped in a div or span element with the RTL directionality specified: + +```html +
+``` diff --git a/src/settings.md b/src/settings.md new file mode 100644 index 0000000..6b7ef7c --- /dev/null +++ b/src/settings.md @@ -0,0 +1,160 @@ +# Preferences + + + +The preferences screen can be accessed by opening the navigation drawer, and choosing **Settings**. It allows you to customize various application settings and how AnkiDroid appears. + +The Preferences screen is divided up into different sections, which are covered below. + +## AnkiDroid + +These are the general settings which affect the whole app: + +#### AnkiWeb account + +Change the account used for syncing with the cloud. For more information on syncing, please see [this section](anki-desktop.md). + +#### Fetch media on sync + +By default, AnkiDroid will sync sounds and images as well as your cards and review history. +If you disable this option, sounds and images will not be downloaded from or uploaded to the sync server by AnkiDroid. + +#### Automatic synchronization + +Enable this option if you want AnkiDroid to sync every time you open and close the app. There is a limit of once every ten minutes for this behavior. Once a sync begins you can cancel it by pressing your device's back button, however it can take some time for the cancellation to take effect. + +Users that want more fine-grained control over when sync occurred might like to use a 3rd party app like Tasker to automate synchronization. See the API documentation for more information on this. + +#### Deck for new cards + +The default of **Use current deck** means that Anki saves the last-used note type for each deck and selects it again then next time you choose the deck (and, in addition, will start with the current deck selected when choosing Add from anywhere). The other option, **Decide by note type,** saves the last-used deck for each note type (and opens the add window to the last-used note type when you choose Add). This may be more convenient if you always use a single note type for each deck. + +#### Language + +Change the language. Note: AnkiDroid translations are contributed by volunteers. If you find missing or incorrect translations, feel free to contribute to the translation project. More details can be found on the AnkiDroid Wiki. + +#### Error reporting mode + +Control whether or not AnkiDroid asks your permission before sending error reports to our error reporting system when AnkiDroid crashes. You can also disable the reporting feature entirely if you wish. + +## Notifications + +This subsection allows you configure when and how AnkiDroid shows alerts in the Android notification bar. + +#### Notify when + +**Never notify** will disable all notifications from AnkiDroid. **Pending messages available** will only show important status updates like when a sync completed. **More than n cards due** will show a notification when you have more than n cards due (requires the widget to be enabled). + +#### Vibrate + +Checking this will make your device vibrate when showing a notification + +#### Blink light + +Checking this will make your device light blink when an unread notification exists (if your device has a notification LED) + +## Reviewing + +The reviewing screen allows you to customize how AnkiDroid behaves when you're +reviewing cards. Note that only the reviewing settings which are applied to **all decks** are shown here. There are more settings related to reviewing which are **deck specific**. These deck specific settings are located in **Deck options**. + +#### New card position + +Controls when new cards are shown: either mixed with, after, or before all reviews. + +#### Start of next day + +Controls when AnkiDroid should start showing the next day's cards. +The default setting of 4AM ensures that if you're studying around midnight, you won't have two days worth of cards shown to you in one session. If you stay up very late or wake up very early, you may want to adjust this to a time you're usually sleeping. + +#### Learn ahead limit + +The Learn ahead limit tells AnkiDroid how to behave when there is nothing left to study in the current deck but cards in learning. The default setting of 20 minutes tells AnkiDroid that cards should be shown early if they are due to be shown in less than 20 minutes and there's nothing else to do. If you set this to 0, Anki will always wait the full period, showing the congratulations screen until the remaining cards are ready to be reviewed. + +#### Timebox limit + +Timeboxing is a technique to help you focus by dividing a longer activity (such as a 30 minute study session) into smaller blocks. If you set the timebox time limit to a non-zero number of minutes, AnkiDroid will periodically show a message saying you how many cards you've managed to study during the prescribed time limit. + +## Display + +This subsection relates to the way cards are displayed during reviewing + +#### Keep screen on + +Ignore the automatic screen timeout setting in Android to always keep the screen on. + +#### Fullscreen mode + +Switches to an immersive fullscreen mode so that you can use more of the screen. You can choose between **Hide the system bars** which will hide the system status bar, action bar, and bottom navigation buttons. Alternatively you can choose **Hide the system bars and answer buttons**, which will hide everything except for the actual card content itself. You can temporarily exit fullscreen mode by swiping inwards (i.e. down or up) from the system bars. + +_Note that immersive fullscreen mode is only supported on Android 4.4+_ + +#### Center align + +By default AnkiDroid tries to show cards exactly as they are shown on Anki Desktop, however if you prefer your cards to be center aligned vertically in AnkiDroid then you can enable this feature. + +#### Show button time + +By default, the answer buttons will display the time a card will next be shown. If you disable this option, the times will not appear, and only labels like **Again**, **Good** and **Easy** will be shown. + +#### Card zoom + +Here you can increase the zoom level of the card content (excluding images). You can use this option if you want to increase the font size for all cards. + +#### Image zoom + +Here you can increase the zoom level of any images embedded in your cards. + +#### Answer button size + +If you find it difficult to press the answer button, you can use this setting to make it bigger. + +#### Show remaining + +Disabling this allows you to hide the card count in the top left of the screen. + +## Whiteboard + +This subsection controls the whiteboard in the reviewer. +Note: the whiteboard must be enabled in each deck individually from the menu in the study screen. + +#### Stroke width + +Control the stroke width of the whiteboard. Reducing the stroke width may allow you to draw with more detail. + +#### Black strokes + +Use black strokes instead of color, which may reduce memory usage. Note: this setting doesn't apply when night mode is enabled. + +## Automatic display answer + +The automatic display answer feature allows you to have the answer shown automatically after some timeout period. You can also have the next question shown automatically; in this case the card is assumed to be failed (i.e. the again button is automatically chosen) + +#### Time to show answer + +Time to wait until answer is automatically shown + +#### Time to show next question + +Time to wait until next question is automatically shown. + +## Fonts + +In this screen you can change the font used by AnkiDroid, and some scaling options related to fonts. +See the [custom fonts](advanced-features/custom-fonts.md) section for more information about using custom fonts. + +#### Default font + +Choose the default font used by the AnkiDroid reviewer. You can add fonts to this list by copying them to the **fonts** folder. + +#### Default font applicability + +The default setting is to only use the default font when no font has been specified in the card styling via Anki Desktop, however you can also force the default font to be applied, ignoring any font specification in the card styling. + +#### Browser and editor font + +The font to be used by the browser and editor + +#### Card browser font scaling + +Lets you change the font size used in the card browser. diff --git a/src/storage-migration-error.md b/src/storage-migration-error.md new file mode 100644 index 0000000..16d8ba1 --- /dev/null +++ b/src/storage-migration-error.md @@ -0,0 +1,54 @@ +# Unexpected error during Storage Migration + +There was an error copying your media to a folder supported by Android R. Before the process started, your data was backed up to AnkiWeb and can be restored. + +Before continuing, please: + +1. Take a backup of your collection (including scheduling + media) via Deck Picker -> Export collection + + - See [Manual Backups](#manual-backups) if you desire a file-based backup + +2. Report the error to us: https://docs.ankidroid.org/help.html#_support + +### Restoring from AnkiWeb Backup + +If you have reviewed a significant number of cards using AnkiDroid since the migration started, see: [Modified Collection](#restoring-a-modified-collection) + +- Reinstall AnkiDroid + - Do not keep app data on uninstall. (_Ensure you have backed up, this will delete the AnkiDroid collection, media and backups from the AnkiDroid folder_) +- Open AnkiDroid, select "Sync from AnkiWeb", + - Log in and re-sync your collection + - Syncing will be significantly faster than AnkiDroid 2.15 +- Once you are synced, you may delete the folder collection in `/storage/emulated/0/AnkiDroid` to save space. +- Your collection is now located at `/storage/emulated/0/Android/data/com.ichi2.anki/files` + +### Restoring a Modified Collection + +_Ensure that you have backed up your collection and media_ + +- Uninstall AnkiDroid + - Do not keep app data. (**This will delete the AnkiDroid collection, media and backups**) +- Reinstall AnkiDroid +- Select _Get Statred_ +- Select _Deck Picker -> Import_ +- Import the backup which was created +- Open a file browser and browse to `/storage/emulated/0/Android/data/com.ichi2.anki/files` +- Delete the `collection.media` folder and file: `collection.media.ad.db2`. Delete `collection.media.ad.db2-journal` if it exists. +- Sync with AnkiWeb and your missing media will be downloaded + +### Personalised Help + +If you require personalised help, please contact us using one of the following: + +- [Mailing List](https://groups.google.com/g/anki-android) +- [Discord](https://discord.gg/qjzcRTx) (`#help` and/or `#mobile-apps`) +- [Our Reddit community](https://www.reddit.com/r/Anki/) +- [AnkiWeb forums](https://forums.ankiweb.net/c/ankidroid/16) + +### Manual Backups + +- Your migrated data exists at the folder listed in _Settings -> Advanced -> AnkiDroid directory_. This is typically: `/storage/emulated/0/Android/data/com.ichi2.anki/files` + - If you installed a parallel build, replace `com.ichi2.anki` with `com.ichi2.anki.A` + - Some file managers will be unable to access this folder. You should be able to access this folder via USB. + - Android will offer to delete this folder when AnkiDroid is uninstalled +- Your non-migrated media and backups of your collection exist at `/storage/emulated/0/AnkiDroid` diff --git a/storage-migration-error.asc b/storage-migration-error.asc deleted file mode 100644 index 6d9389b..0000000 --- a/storage-migration-error.asc +++ /dev/null @@ -1,54 +0,0 @@ -:docinfo1: -= Unexpected error during Storage Migration -:sectanchors: - -There was an error copying your media to a folder supported by Android R. Before the process started, your data was backed up to AnkiWeb and can be restored. - -Before continuing, please: - -1. Take a backup of your collection (including scheduling + media) via Deck Picker -> Export collection - * See <> if you desire a file-based backup -2. Report the error to us: https://docs.ankidroid.org/help.html#_support - -=== Restoring from AnkiWeb Backup - -If you have reviewed a significant number of cards using AnkiDroid since the migration started, see: <> - -* Reinstall AnkiDroid -** Do not keep app data on uninstall. (*Ensure you have backed up, this will delete the AnkiDroid collection, media and backups from the AnkiDroid folder*) -* Open AnkiDroid, select "Sync from AnkiWeb", -** Log in and re-sync your collection -** Syncing will be significantly faster than AnkiDroid 2.15 -* Once you are synced, you may delete the folder collection in `/storage/emulated/0/AnkiDroid` to save space. -* Your collection is now located at `/storage/emulated/0/Android/data/com.ichi2.anki/files` - -=== Restoring a Modified Collection [[restore_modified_collection]] - -*Ensure that you have backed up your collection and media* - -* Uninstall AnkiDroid -** Do not keep app data. (**This will delete the AnkiDroid collection, media and backups**) -* Reinstall AnkiDroid -* Select 'Get Statred' -* Select 'Deck Picker -> Import' -* Import the backup which was created -* Open a file browser and browse to `/storage/emulated/0/Android/data/com.ichi2.anki/files` -* Delete the `collection.media` folder and file: `collection.media.ad.db2`. Delete `collection.media.ad.db2-journal` if it exists. -* Sync with AnkiWeb and your missing media will be downloaded - -=== Personalised Help [[help]] - -If you require personalised help, please contact us using one of the following: - -* https://groups.google.com/g/anki-android[Mailing List] -* https://discord.gg/qjzcRTx[Discord] (`#help` and/or `#mobile-apps`) -* https://www.reddit.com/r/Anki/[Our Reddit community] -* https://forums.ankiweb.net/c/ankidroid/16[AnkiWeb forums] - -=== Manual Backups [[take_manual_backup]] - -* Your migrated data exists at the folder listed in _Settings -> Advanced -> AnkiDroid directory_. This is typically: `/storage/emulated/0/Android/data/com.ichi2.anki/files` -** If you installed a parallel build, replace `com.ichi2.anki` with `com.ichi2.anki.A` -** Some file managers will be unable to access this folder. You should be able to access this folder via USB. -** Android will offer to delete this folder when AnkiDroid is uninstalled -* Your non-migrated media and backups of your collection exist at `/storage/emulated/0/AnkiDroid` diff --git a/theme/book.js b/theme/book.js new file mode 100644 index 0000000..aa12e7e --- /dev/null +++ b/theme/book.js @@ -0,0 +1,697 @@ +"use strict"; + +// Fix back button cache problem +window.onunload = function () { }; + +// Global variable, shared between modules +function playground_text(playground, hidden = true) { + let code_block = playground.querySelector("code"); + + if (window.ace && code_block.classList.contains("editable")) { + let editor = window.ace.edit(code_block); + return editor.getValue(); + } else if (hidden) { + return code_block.textContent; + } else { + return code_block.innerText; + } +} + +(function codeSnippets() { + function fetch_with_timeout(url, options, timeout = 6000) { + return Promise.race([ + fetch(url, options), + new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), timeout)) + ]); + } + + var playgrounds = Array.from(document.querySelectorAll(".playground")); + if (playgrounds.length > 0) { + fetch_with_timeout("https://play.rust-lang.org/meta/crates", { + headers: { + 'Content-Type': "application/json", + }, + method: 'POST', + mode: 'cors', + }) + .then(response => response.json()) + .then(response => { + // get list of crates available in the rust playground + let playground_crates = response.crates.map(item => item["id"]); + playgrounds.forEach(block => handle_crate_list_update(block, playground_crates)); + }); + } + + function handle_crate_list_update(playground_block, playground_crates) { + // update the play buttons after receiving the response + update_play_button(playground_block, playground_crates); + + // and install on change listener to dynamically update ACE editors + if (window.ace) { + let code_block = playground_block.querySelector("code"); + if (code_block.classList.contains("editable")) { + let editor = window.ace.edit(code_block); + editor.addEventListener("change", function (e) { + update_play_button(playground_block, playground_crates); + }); + // add Ctrl-Enter command to execute rust code + editor.commands.addCommand({ + name: "run", + bindKey: { + win: "Ctrl-Enter", + mac: "Ctrl-Enter" + }, + exec: _editor => run_rust_code(playground_block) + }); + } + } + } + + // updates the visibility of play button based on `no_run` class and + // used crates vs ones available on https://play.rust-lang.org + function update_play_button(pre_block, playground_crates) { + var play_button = pre_block.querySelector(".play-button"); + + // skip if code is `no_run` + if (pre_block.querySelector('code').classList.contains("no_run")) { + play_button.classList.add("hidden"); + return; + } + + // get list of `extern crate`'s from snippet + var txt = playground_text(pre_block); + var re = /extern\s+crate\s+([a-zA-Z_0-9]+)\s*;/g; + var snippet_crates = []; + var item; + while (item = re.exec(txt)) { + snippet_crates.push(item[1]); + } + + // check if all used crates are available on play.rust-lang.org + var all_available = snippet_crates.every(function (elem) { + return playground_crates.indexOf(elem) > -1; + }); + + if (all_available) { + play_button.classList.remove("hidden"); + } else { + play_button.classList.add("hidden"); + } + } + + function run_rust_code(code_block) { + var result_block = code_block.querySelector(".result"); + if (!result_block) { + result_block = document.createElement('code'); + result_block.className = 'result hljs language-bash'; + + code_block.append(result_block); + } + + let text = playground_text(code_block); + let classes = code_block.querySelector('code').classList; + let edition = "2015"; + if(classes.contains("edition2018")) { + edition = "2018"; + } else if(classes.contains("edition2021")) { + edition = "2021"; + } + var params = { + version: "stable", + optimize: "0", + code: text, + edition: edition + }; + + if (text.indexOf("#![feature") !== -1) { + params.version = "nightly"; + } + + result_block.innerText = "Running..."; + + fetch_with_timeout("https://play.rust-lang.org/evaluate.json", { + headers: { + 'Content-Type': "application/json", + }, + method: 'POST', + mode: 'cors', + body: JSON.stringify(params) + }) + .then(response => response.json()) + .then(response => { + if (response.result.trim() === '') { + result_block.innerText = "No output"; + result_block.classList.add("result-no-output"); + } else { + result_block.innerText = response.result; + result_block.classList.remove("result-no-output"); + } + }) + .catch(error => result_block.innerText = "Playground Communication: " + error.message); + } + + // Syntax highlighting Configuration + hljs.configure({ + tabReplace: ' ', // 4 spaces + languages: [], // Languages used for auto-detection + }); + + let code_nodes = Array + .from(document.querySelectorAll('code')) + // Don't highlight `inline code` blocks in headers. + .filter(function (node) {return !node.parentElement.classList.contains("header"); }); + + if (window.ace) { + // language-rust class needs to be removed for editable + // blocks or highlightjs will capture events + code_nodes + .filter(function (node) {return node.classList.contains("editable"); }) + .forEach(function (block) { block.classList.remove('language-rust'); }); + + code_nodes + .filter(function (node) {return !node.classList.contains("editable"); }) + .forEach(function (block) { hljs.highlightBlock(block); }); + } else { + code_nodes.forEach(function (block) { hljs.highlightBlock(block); }); + } + + // Adding the hljs class gives code blocks the color css + // even if highlighting doesn't apply + code_nodes.forEach(function (block) { block.classList.add('hljs'); }); + + Array.from(document.querySelectorAll("code.hljs")).forEach(function (block) { + + var lines = Array.from(block.querySelectorAll('.boring')); + // If no lines were hidden, return + if (!lines.length) { return; } + block.classList.add("hide-boring"); + + var buttons = document.createElement('div'); + buttons.className = 'buttons'; + buttons.innerHTML = ""; + + // add expand button + var pre_block = block.parentNode; + pre_block.insertBefore(buttons, pre_block.firstChild); + + pre_block.querySelector('.buttons').addEventListener('click', function (e) { + if (e.target.classList.contains('fa-eye')) { + e.target.classList.remove('fa-eye'); + e.target.classList.add('fa-eye-slash'); + e.target.title = 'Hide lines'; + e.target.setAttribute('aria-label', e.target.title); + + block.classList.remove('hide-boring'); + } else if (e.target.classList.contains('fa-eye-slash')) { + e.target.classList.remove('fa-eye-slash'); + e.target.classList.add('fa-eye'); + e.target.title = 'Show hidden lines'; + e.target.setAttribute('aria-label', e.target.title); + + block.classList.add('hide-boring'); + } + }); + }); + + if (window.playground_copyable) { + Array.from(document.querySelectorAll('pre code')).forEach(function (block) { + var pre_block = block.parentNode; + if (!pre_block.classList.contains('playground')) { + var buttons = pre_block.querySelector(".buttons"); + if (!buttons) { + buttons = document.createElement('div'); + buttons.className = 'buttons'; + pre_block.insertBefore(buttons, pre_block.firstChild); + } + + var clipButton = document.createElement('button'); + clipButton.className = 'fa fa-copy clip-button'; + clipButton.title = 'Copy to clipboard'; + clipButton.setAttribute('aria-label', clipButton.title); + clipButton.innerHTML = ''; + + buttons.insertBefore(clipButton, buttons.firstChild); + } + }); + } + + // Process playground code blocks + Array.from(document.querySelectorAll(".playground")).forEach(function (pre_block) { + // Add play button + var buttons = pre_block.querySelector(".buttons"); + if (!buttons) { + buttons = document.createElement('div'); + buttons.className = 'buttons'; + pre_block.insertBefore(buttons, pre_block.firstChild); + } + + var runCodeButton = document.createElement('button'); + runCodeButton.className = 'fa fa-play play-button'; + runCodeButton.hidden = true; + runCodeButton.title = 'Run this code'; + runCodeButton.setAttribute('aria-label', runCodeButton.title); + + buttons.insertBefore(runCodeButton, buttons.firstChild); + runCodeButton.addEventListener('click', function (e) { + run_rust_code(pre_block); + }); + + if (window.playground_copyable) { + var copyCodeClipboardButton = document.createElement('button'); + copyCodeClipboardButton.className = 'fa fa-copy clip-button'; + copyCodeClipboardButton.innerHTML = ''; + copyCodeClipboardButton.title = 'Copy to clipboard'; + copyCodeClipboardButton.setAttribute('aria-label', copyCodeClipboardButton.title); + + buttons.insertBefore(copyCodeClipboardButton, buttons.firstChild); + } + + let code_block = pre_block.querySelector("code"); + if (window.ace && code_block.classList.contains("editable")) { + var undoChangesButton = document.createElement('button'); + undoChangesButton.className = 'fa fa-history reset-button'; + undoChangesButton.title = 'Undo changes'; + undoChangesButton.setAttribute('aria-label', undoChangesButton.title); + + buttons.insertBefore(undoChangesButton, buttons.firstChild); + + undoChangesButton.addEventListener('click', function () { + let editor = window.ace.edit(code_block); + editor.setValue(editor.originalCode); + editor.clearSelection(); + }); + } + }); +})(); + +(function themes() { + var html = document.querySelector('html'); + var themeToggleButton = document.getElementById('theme-toggle'); + var themePopup = document.getElementById('theme-list'); + var themeColorMetaTag = document.querySelector('meta[name="theme-color"]'); + var stylesheets = { + ayuHighlight: document.querySelector("[href$='ayu-highlight.css']"), + tomorrowNight: document.querySelector("[href$='tomorrow-night.css']"), + highlight: document.querySelector("[href$='highlight.css']"), + }; + + function showThemes() { + themePopup.style.display = 'block'; + themeToggleButton.setAttribute('aria-expanded', true); + themePopup.querySelector("button#" + get_theme()).focus(); + } + + function updateThemeSelected() { + themePopup.querySelectorAll('.theme-selected').forEach(function (el) { + el.classList.remove('theme-selected'); + }); + themePopup.querySelector("button#" + get_theme()).classList.add('theme-selected'); + } + + function hideThemes() { + themePopup.style.display = 'none'; + themeToggleButton.setAttribute('aria-expanded', false); + themeToggleButton.focus(); + } + + function get_theme() { + var theme; + try { theme = localStorage.getItem('mdbook-theme'); } catch (e) { } + if (theme === null || theme === undefined) { + return default_theme; + } else { + return theme; + } + } + + function set_theme(theme, store = true) { + let ace_theme; + + if (theme == 'coal' || theme == 'navy') { + stylesheets.ayuHighlight.disabled = true; + stylesheets.tomorrowNight.disabled = false; + stylesheets.highlight.disabled = true; + + ace_theme = "ace/theme/tomorrow_night"; + } else if (theme == 'ayu') { + stylesheets.ayuHighlight.disabled = false; + stylesheets.tomorrowNight.disabled = true; + stylesheets.highlight.disabled = true; + ace_theme = "ace/theme/tomorrow_night"; + } else { + stylesheets.ayuHighlight.disabled = true; + stylesheets.tomorrowNight.disabled = true; + stylesheets.highlight.disabled = false; + ace_theme = "ace/theme/dawn"; + } + + setTimeout(function () { + themeColorMetaTag.content = getComputedStyle(document.documentElement).backgroundColor; + }, 1); + + if (window.ace && window.editors) { + window.editors.forEach(function (editor) { + editor.setTheme(ace_theme); + }); + } + + var previousTheme = get_theme(); + + if (store) { + try { localStorage.setItem('mdbook-theme', theme); } catch (e) { } + } + + html.classList.remove(previousTheme); + html.classList.add(theme); + updateThemeSelected(); + } + + // Set theme + var theme = get_theme(); + + set_theme(theme, false); + + themeToggleButton.addEventListener('click', function () { + if (themePopup.style.display === 'block') { + hideThemes(); + } else { + showThemes(); + } + }); + + themePopup.addEventListener('click', function (e) { + var theme; + if (e.target.className === "theme") { + theme = e.target.id; + } else if (e.target.parentElement.className === "theme") { + theme = e.target.parentElement.id; + } else { + return; + } + set_theme(theme); + }); + + themePopup.addEventListener('focusout', function(e) { + // e.relatedTarget is null in Safari and Firefox on macOS (see workaround below) + if (!!e.relatedTarget && !themeToggleButton.contains(e.relatedTarget) && !themePopup.contains(e.relatedTarget)) { + hideThemes(); + } + }); + + // Should not be needed, but it works around an issue on macOS & iOS: https://github.com/rust-lang/mdBook/issues/628 + document.addEventListener('click', function(e) { + if (themePopup.style.display === 'block' && !themeToggleButton.contains(e.target) && !themePopup.contains(e.target)) { + hideThemes(); + } + }); + + document.addEventListener('keydown', function (e) { + if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) { return; } + if (!themePopup.contains(e.target)) { return; } + + switch (e.key) { + case 'Escape': + e.preventDefault(); + hideThemes(); + break; + case 'ArrowUp': + e.preventDefault(); + var li = document.activeElement.parentElement; + if (li && li.previousElementSibling) { + li.previousElementSibling.querySelector('button').focus(); + } + break; + case 'ArrowDown': + e.preventDefault(); + var li = document.activeElement.parentElement; + if (li && li.nextElementSibling) { + li.nextElementSibling.querySelector('button').focus(); + } + break; + case 'Home': + e.preventDefault(); + themePopup.querySelector('li:first-child button').focus(); + break; + case 'End': + e.preventDefault(); + themePopup.querySelector('li:last-child button').focus(); + break; + } + }); +})(); + +(function sidebar() { + var body = document.querySelector("body"); + var sidebar = document.getElementById("sidebar"); + var sidebarLinks = document.querySelectorAll('#sidebar a'); + var sidebarToggleButton = document.getElementById("sidebar-toggle"); + var sidebarResizeHandle = document.getElementById("sidebar-resize-handle"); + var firstContact = null; + + function showSidebar() { + body.classList.remove('sidebar-hidden') + body.classList.add('sidebar-visible'); + Array.from(sidebarLinks).forEach(function (link) { + link.setAttribute('tabIndex', 0); + }); + sidebarToggleButton.setAttribute('aria-expanded', true); + sidebar.setAttribute('aria-hidden', false); + try { localStorage.setItem('mdbook-sidebar', 'visible'); } catch (e) { } + } + + + var sidebarAnchorToggles = document.querySelectorAll('#sidebar a.toggle'); + + function toggleSection(ev) { + ev.currentTarget.parentElement.classList.toggle('expanded'); + } + + Array.from(sidebarAnchorToggles).forEach(function (el) { + el.addEventListener('click', toggleSection); + }); + + function hideSidebar() { + body.classList.remove('sidebar-visible') + body.classList.add('sidebar-hidden'); + Array.from(sidebarLinks).forEach(function (link) { + link.setAttribute('tabIndex', -1); + }); + sidebarToggleButton.setAttribute('aria-expanded', false); + sidebar.setAttribute('aria-hidden', true); + try { localStorage.setItem('mdbook-sidebar', 'hidden'); } catch (e) { } + } + + // Toggle sidebar + sidebarToggleButton.addEventListener('click', function sidebarToggle() { + if (body.classList.contains("sidebar-hidden")) { + var current_width = parseInt( + document.documentElement.style.getPropertyValue('--sidebar-width'), 10); + if (current_width < 150) { + document.documentElement.style.setProperty('--sidebar-width', '150px'); + } + showSidebar(); + } else if (body.classList.contains("sidebar-visible")) { + hideSidebar(); + } else { + if (getComputedStyle(sidebar)['transform'] === 'none') { + hideSidebar(); + } else { + showSidebar(); + } + } + }); + + sidebarResizeHandle.addEventListener('mousedown', initResize, false); + + function initResize(e) { + window.addEventListener('mousemove', resize, false); + window.addEventListener('mouseup', stopResize, false); + body.classList.add('sidebar-resizing'); + } + function resize(e) { + var pos = (e.clientX - sidebar.offsetLeft); + if (pos < 20) { + hideSidebar(); + } else { + if (body.classList.contains("sidebar-hidden")) { + showSidebar(); + } + pos = Math.min(pos, window.innerWidth - 100); + document.documentElement.style.setProperty('--sidebar-width', pos + 'px'); + } + } + //on mouseup remove windows functions mousemove & mouseup + function stopResize(e) { + body.classList.remove('sidebar-resizing'); + window.removeEventListener('mousemove', resize, false); + window.removeEventListener('mouseup', stopResize, false); + } + + document.addEventListener('touchstart', function (e) { + firstContact = { + x: e.touches[0].clientX, + time: Date.now() + }; + }, { passive: true }); + + document.addEventListener('touchmove', function (e) { + if (!firstContact) + return; + + var curX = e.touches[0].clientX; + var xDiff = curX - firstContact.x, + tDiff = Date.now() - firstContact.time; + + if (tDiff < 250 && Math.abs(xDiff) >= 150) { + if (xDiff >= 0 && firstContact.x < Math.min(document.body.clientWidth * 0.25, 300)) + showSidebar(); + else if (xDiff < 0 && curX < 300) + hideSidebar(); + + firstContact = null; + } + }, { passive: true }); +})(); + +(function chapterNavigation() { + document.addEventListener('keydown', function (e) { + if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) { return; } + if (window.search && window.search.hasFocus()) { return; } + var html = document.querySelector('html'); + + function next() { + var nextButton = document.querySelector('.nav-chapters.next'); + if (nextButton) { + window.location.href = nextButton.href; + } + } + function prev() { + var previousButton = document.querySelector('.nav-chapters.previous'); + if (previousButton) { + window.location.href = previousButton.href; + } + } + switch (e.key) { + case 'ArrowRight': + e.preventDefault(); + if (html.dir == 'rtl') { + prev(); + } else { + next(); + } + break; + case 'ArrowLeft': + e.preventDefault(); + if (html.dir == 'rtl') { + next(); + } else { + prev(); + } + break; + } + }); +})(); + +(function clipboard() { + var clipButtons = document.querySelectorAll('.clip-button'); + + function hideTooltip(elem) { + elem.firstChild.innerText = ""; + elem.className = 'fa fa-copy clip-button'; + } + + function showTooltip(elem, msg) { + elem.firstChild.innerText = msg; + elem.className = 'fa fa-copy tooltipped'; + } + + var clipboardSnippets = new ClipboardJS('.clip-button', { + text: function (trigger) { + hideTooltip(trigger); + let playground = trigger.closest("pre"); + return playground_text(playground, false); + } + }); + + Array.from(clipButtons).forEach(function (clipButton) { + clipButton.addEventListener('mouseout', function (e) { + hideTooltip(e.currentTarget); + }); + }); + + clipboardSnippets.on('success', function (e) { + e.clearSelection(); + showTooltip(e.trigger, "Copied!"); + }); + + clipboardSnippets.on('error', function (e) { + showTooltip(e.trigger, "Clipboard error!"); + }); +})(); + +(function scrollToTop () { + var menuTitle = document.querySelector('.menu-title'); + + menuTitle.addEventListener('click', function () { + document.scrollingElement.scrollTo({ top: 0, behavior: 'smooth' }); + }); +})(); + +(function controllMenu() { + var menu = document.getElementById('menu-bar'); + + (function controllPosition() { + var scrollTop = document.scrollingElement.scrollTop; + var prevScrollTop = scrollTop; + var minMenuY = -menu.clientHeight - 50; + // When the script loads, the page can be at any scroll (e.g. if you reforesh it). + menu.style.top = scrollTop + 'px'; + // Same as parseInt(menu.style.top.slice(0, -2), but faster + var topCache = menu.style.top.slice(0, -2); + menu.classList.remove('sticky'); + var stickyCache = false; // Same as menu.classList.contains('sticky'), but faster + document.addEventListener('scroll', function () { + scrollTop = Math.max(document.scrollingElement.scrollTop, 0); + // `null` means that it doesn't need to be updated + var nextSticky = null; + var nextTop = null; + var scrollDown = scrollTop > prevScrollTop; + var menuPosAbsoluteY = topCache - scrollTop; + if (scrollDown) { + nextSticky = false; + if (menuPosAbsoluteY > 0) { + nextTop = prevScrollTop; + } + } else { + if (menuPosAbsoluteY > 0) { + nextSticky = true; + } else if (menuPosAbsoluteY < minMenuY) { + nextTop = prevScrollTop + minMenuY; + } + } + if (nextSticky === true && stickyCache === false) { + menu.classList.add('sticky'); + stickyCache = true; + } else if (nextSticky === false && stickyCache === true) { + menu.classList.remove('sticky'); + stickyCache = false; + } + if (nextTop !== null) { + menu.style.top = nextTop + 'px'; + topCache = nextTop; + } + prevScrollTop = scrollTop; + }, { passive: true }); + })(); + (function controllBorder() { + function updateBorder() { + if (menu.offsetTop === 0) { + menu.classList.remove('bordered'); + } else { + menu.classList.add('bordered'); + } + } + updateBorder(); + document.addEventListener('scroll', updateBorder, { passive: true }); + })(); +})(); diff --git a/theme/css/chrome.css b/theme/css/chrome.css new file mode 100644 index 0000000..8b78255 --- /dev/null +++ b/theme/css/chrome.css @@ -0,0 +1,606 @@ +/* CSS for UI elements (a.k.a. chrome) */ + +@import 'variables.css'; + +html { + scrollbar-color: var(--scrollbar) var(--bg); +} +#searchresults a, +.content a:link, +a:visited, +a > .hljs { + color: var(--links); +} + +/* + body-container is necessary because mobile browsers don't seem to like + overflow-x on the body tag when there is a tag. +*/ +#body-container { + /* + This is used when the sidebar pushes the body content off the side of + the screen on small screens. Without it, dragging on mobile Safari + will want to reposition the viewport in a weird way. + */ + overflow-x: clip; +} + +/* Menu Bar */ + +#menu-bar, +#menu-bar-hover-placeholder { + z-index: 101; + margin: auto calc(0px - var(--page-padding)); +} +#menu-bar { + position: relative; + display: flex; + flex-wrap: wrap; + background-color: var(--bg); + border-block-end-color: var(--bg); + border-block-end-width: 1px; + border-block-end-style: solid; +} +#menu-bar.sticky, +.js #menu-bar-hover-placeholder:hover + #menu-bar, +.js #menu-bar:hover, +.js.sidebar-visible #menu-bar { + position: -webkit-sticky; + position: sticky; + top: 0 !important; +} +#menu-bar-hover-placeholder { + position: sticky; + position: -webkit-sticky; + top: 0; + height: var(--menu-bar-height); +} +#menu-bar.bordered { + border-block-end-color: var(--table-border-color); +} +#menu-bar i, #menu-bar .icon-button { + position: relative; + padding: 0 8px; + z-index: 10; + line-height: var(--menu-bar-height); + cursor: pointer; + transition: color 0.5s; +} +@media only screen and (max-width: 420px) { + #menu-bar i, #menu-bar .icon-button { + padding: 0 5px; + } +} + +.icon-button { + border: none; + background: none; + padding: 0; + color: inherit; +} +.icon-button i { + margin: 0; +} + +.right-buttons { + margin: 0 15px; +} +.right-buttons a { + text-decoration: none; +} + +.left-buttons { + display: flex; + margin: 0 5px; +} +.no-js .left-buttons button { + display: none; +} + +.menu-title { + display: inline-block; + font-weight: 200; + font-size: 2.4rem; + line-height: var(--menu-bar-height); + text-align: center; + margin: 0; + flex: 1; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.js .menu-title { + cursor: pointer; +} + +.menu-bar, +.menu-bar:visited, +.nav-chapters, +.nav-chapters:visited, +.mobile-nav-chapters, +.mobile-nav-chapters:visited, +.menu-bar .icon-button, +.menu-bar a i { + color: var(--icons); +} + +.menu-bar i:hover, +.menu-bar .icon-button:hover, +.nav-chapters:hover, +.mobile-nav-chapters i:hover { + color: var(--icons-hover); +} + +/* Nav Icons */ + +.nav-chapters { + font-size: 2.5em; + text-align: center; + text-decoration: none; + + position: fixed; + top: 0; + bottom: 0; + margin: 0; + max-width: 150px; + min-width: 90px; + + display: flex; + justify-content: center; + align-content: center; + flex-direction: column; + + transition: color 0.5s, background-color 0.5s; +} + +.nav-chapters:hover { + text-decoration: none; + background-color: var(--theme-hover); + transition: background-color 0.15s, color 0.15s; +} + +.nav-wrapper { + margin-block-start: 50px; + display: none; +} + +.mobile-nav-chapters { + font-size: 2.5em; + text-align: center; + text-decoration: none; + width: 90px; + border-radius: 5px; + background-color: var(--sidebar-bg); +} + +/* Only Firefox supports flow-relative values */ +.previous { float: left; } +[dir=rtl] .previous { float: right; } + +/* Only Firefox supports flow-relative values */ +.next { + float: right; + right: var(--page-padding); +} +[dir=rtl] .next { + float: left; + right: unset; + left: var(--page-padding); +} + +/* Use the correct buttons for RTL layouts*/ +[dir=rtl] .previous i.fa-angle-left:before {content:"\f105";} +[dir=rtl] .next i.fa-angle-right:before { content:"\f104"; } + +@media only screen and (max-width: 1080px) { + .nav-wide-wrapper { display: none; } + .nav-wrapper { display: block; } +} + +/* sidebar-visible */ +@media only screen and (max-width: 1380px) { + #sidebar-toggle-anchor:checked ~ .page-wrapper .nav-wide-wrapper { display: none; } + #sidebar-toggle-anchor:checked ~ .page-wrapper .nav-wrapper { display: block; } +} + +/* Inline code */ + +:not(pre) > .hljs { + display: inline; + padding: 0.1em 0.3em; + border-radius: 3px; +} + +:not(pre):not(a) > .hljs { + color: var(--inline-code-color); + overflow-x: initial; +} + +a:hover > .hljs { + text-decoration: underline; +} + +pre { + position: relative; +} +pre > .buttons { + position: absolute; + z-index: 100; + right: 0px; + top: 2px; + margin: 0px; + padding: 2px 0px; + + color: var(--sidebar-fg); + cursor: pointer; + visibility: hidden; + opacity: 0; + transition: visibility 0.1s linear, opacity 0.1s linear; +} +pre:hover > .buttons { + visibility: visible; + opacity: 1 +} +pre > .buttons :hover { + color: var(--sidebar-active); + border-color: var(--icons-hover); + background-color: var(--theme-hover); +} +pre > .buttons i { + margin-inline-start: 8px; +} +pre > .buttons button { + cursor: inherit; + margin: 0px 5px; + padding: 3px 5px; + font-size: 14px; + + border-style: solid; + border-width: 1px; + border-radius: 4px; + border-color: var(--icons); + background-color: var(--theme-popup-bg); + transition: 100ms; + transition-property: color,border-color,background-color; + color: var(--icons); +} +@media (pointer: coarse) { + pre > .buttons button { + /* On mobile, make it easier to tap buttons. */ + padding: 0.3rem 1rem; + } + + .sidebar-resize-indicator { + /* Hide resize indicator on devices with limited accuracy */ + display: none; + } +} +pre > code { + display: block; + padding: 1rem; +} + +/* FIXME: ACE editors overlap their buttons because ACE does absolute + positioning within the code block which breaks padding. The only solution I + can think of is to move the padding to the outer pre tag (or insert a div + wrapper), but that would require fixing a whole bunch of CSS rules. +*/ +.hljs.ace_editor { + padding: 0rem 0rem; +} + +pre > .result { + margin-block-start: 10px; +} + +/* Search */ + +#searchresults a { + text-decoration: none; +} + +mark { + border-radius: 2px; + padding-block-start: 0; + padding-block-end: 1px; + padding-inline-start: 3px; + padding-inline-end: 3px; + margin-block-start: 0; + margin-block-end: -1px; + margin-inline-start: -3px; + margin-inline-end: -3px; + background-color: var(--search-mark-bg); + transition: background-color 300ms linear; + cursor: pointer; +} + +mark.fade-out { + background-color: rgba(0,0,0,0) !important; + cursor: auto; +} + +.searchbar-outer { + margin-inline-start: auto; + margin-inline-end: auto; + max-width: var(--content-max-width); +} + +#searchbar { + width: 100%; + margin-block-start: 5px; + margin-block-end: 0; + margin-inline-start: auto; + margin-inline-end: auto; + padding: 10px 16px; + transition: box-shadow 300ms ease-in-out; + border: 1px solid var(--searchbar-border-color); + border-radius: 3px; + background-color: var(--searchbar-bg); + color: var(--searchbar-fg); +} +#searchbar:focus, +#searchbar.active { + box-shadow: 0 0 3px var(--searchbar-shadow-color); +} + +.searchresults-header { + font-weight: bold; + font-size: 1em; + padding-block-start: 18px; + padding-block-end: 0; + padding-inline-start: 5px; + padding-inline-end: 0; + color: var(--searchresults-header-fg); +} + +.searchresults-outer { + margin-inline-start: auto; + margin-inline-end: auto; + max-width: var(--content-max-width); + border-block-end: 1px dashed var(--searchresults-border-color); +} + +ul#searchresults { + list-style: none; + padding-inline-start: 20px; +} +ul#searchresults li { + margin: 10px 0px; + padding: 2px; + border-radius: 2px; +} +ul#searchresults li.focus { + background-color: var(--searchresults-li-bg); +} +ul#searchresults span.teaser { + display: block; + clear: both; + margin-block-start: 5px; + margin-block-end: 0; + margin-inline-start: 20px; + margin-inline-end: 0; + font-size: 0.8em; +} +ul#searchresults span.teaser em { + font-weight: bold; + font-style: normal; +} + +/* Sidebar */ + +.sidebar { + position: fixed; + left: 0; + top: 0; + bottom: 0; + width: var(--sidebar-width); + font-size: 0.875em; + box-sizing: border-box; + -webkit-overflow-scrolling: touch; + overscroll-behavior-y: contain; + background-color: var(--sidebar-bg); + color: var(--sidebar-fg); +} +[dir=rtl] .sidebar { left: unset; right: 0; } +.sidebar-resizing { + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; +} +.no-js .sidebar, +.js:not(.sidebar-resizing) .sidebar { + transition: transform 0.3s; /* Animation: slide away */ +} +.sidebar code { + line-height: 2em; +} +.sidebar .sidebar-scrollbox { + overflow-y: auto; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + padding: 10px 10px; +} +.sidebar .sidebar-resize-handle { + position: absolute; + cursor: col-resize; + width: 0; + right: calc(var(--sidebar-resize-indicator-width) * -1); + top: 0; + bottom: 0; + display: flex; + align-items: center; +} + +.sidebar-resize-handle .sidebar-resize-indicator { + width: 100%; + height: 12px; + background-color: var(--icons); + margin-inline-start: var(--sidebar-resize-indicator-space); +} + +[dir=rtl] .sidebar .sidebar-resize-handle { + left: calc(var(--sidebar-resize-indicator-width) * -1); + right: unset; +} +.js .sidebar .sidebar-resize-handle { + cursor: col-resize; + width: calc(var(--sidebar-resize-indicator-width) - var(--sidebar-resize-indicator-space)); +} +/* sidebar-hidden */ +#sidebar-toggle-anchor:not(:checked) ~ .sidebar { + transform: translateX(calc(0px - var(--sidebar-width) - var(--sidebar-resize-indicator-width))); + z-index: -1; +} +[dir=rtl] #sidebar-toggle-anchor:not(:checked) ~ .sidebar { + transform: translateX(calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width))); +} +.sidebar::-webkit-scrollbar { + background: var(--sidebar-bg); +} +.sidebar::-webkit-scrollbar-thumb { + background: var(--scrollbar); +} + +/* sidebar-visible */ +#sidebar-toggle-anchor:checked ~ .page-wrapper { + transform: translateX(calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width))); +} +[dir=rtl] #sidebar-toggle-anchor:checked ~ .page-wrapper { + transform: translateX(calc(0px - var(--sidebar-width) - var(--sidebar-resize-indicator-width))); +} +@media only screen and (min-width: 620px) { + #sidebar-toggle-anchor:checked ~ .page-wrapper { + transform: none; + margin-inline-start: calc(var(--sidebar-width) + var(--sidebar-resize-indicator-width)); + } + [dir=rtl] #sidebar-toggle-anchor:checked ~ .page-wrapper { + transform: none; + } +} + +.chapter { + list-style: none outside none; + padding-inline-start: 0; + line-height: 2.2em; +} + +.chapter ol { + width: 100%; +} + +.chapter li { + display: flex; + color: var(--sidebar-non-existant); +} +.chapter li a { + display: block; + padding: 0; + text-decoration: none; + color: var(--sidebar-fg); +} + +.chapter li a:hover { + color: var(--sidebar-active); +} + +.chapter li a.active { + color: var(--sidebar-active); +} + +.chapter li > a.toggle { + cursor: pointer; + display: block; + margin-inline-start: auto; + padding: 0 10px; + user-select: none; + opacity: 0.68; +} + +.chapter li > a.toggle div { + transition: transform 0.5s; +} + +/* collapse the section */ +.chapter li:not(.expanded) + li > ol { + display: none; +} + +.chapter li.chapter-item { + line-height: 1.5em; + margin-block-start: 0.6em; +} + +.chapter li.expanded > a.toggle div { + transform: rotate(90deg); +} + +.spacer { + width: 100%; + height: 3px; + margin: 5px 0px; +} +.chapter .spacer { + background-color: var(--sidebar-spacer); +} + +@media (-moz-touch-enabled: 1), (pointer: coarse) { + .chapter li a { padding: 5px 0; } + .spacer { margin: 10px 0; } +} + +.section { + list-style: none outside none; + padding-inline-start: 20px; + line-height: 1.9em; +} + +/* Theme Menu Popup */ + +.theme-popup { + position: absolute; + left: 10px; + top: var(--menu-bar-height); + z-index: 1000; + border-radius: 4px; + font-size: 0.7em; + color: var(--fg); + background: var(--theme-popup-bg); + border: 1px solid var(--theme-popup-border); + margin: 0; + padding: 0; + list-style: none; + display: none; + /* Don't let the children's background extend past the rounded corners. */ + overflow: hidden; +} +[dir=rtl] .theme-popup { left: unset; right: 10px; } +.theme-popup .default { + color: var(--icons); +} +.theme-popup .theme { + width: 100%; + border: 0; + margin: 0; + padding: 2px 20px; + line-height: 25px; + white-space: nowrap; + text-align: start; + cursor: pointer; + color: inherit; + background: inherit; + font-size: inherit; +} +.theme-popup .theme:hover { + background-color: var(--theme-hover); +} + +.theme-selected::before { + display: inline-block; + content: "✓"; + margin-inline-start: -14px; + width: 14px; +} diff --git a/theme/css/general.css b/theme/css/general.css new file mode 100644 index 0000000..e7d20da --- /dev/null +++ b/theme/css/general.css @@ -0,0 +1,234 @@ +/* Base styles and content styles */ + +@import 'variables.css'; + +:root { + /* Browser default font-size is 16px, this way 1 rem = 10px */ + font-size: 62.5%; + color-scheme: var(--color-scheme); +} + +html { + font-family: "Open Sans", sans-serif; + color: var(--fg); + background-color: var(--bg); + text-size-adjust: none; + -webkit-text-size-adjust: none; +} + +body { + margin: 0; + font-size: 1.6rem; + overflow-x: hidden; +} + +code { + font-family: var(--mono-font) !important; + font-size: var(--code-font-size); + direction: ltr !important; +} + +/* make long words/inline code not x overflow */ +main { + overflow-wrap: break-word; +} + +/* make wide tables scroll if they overflow */ +.table-wrapper { + overflow-x: auto; +} + +/* Don't change font size in headers. */ +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + font-size: unset; +} + +.left { float: left; } +.right { float: right; } +.boring { opacity: 0.6; } +.hide-boring .boring { display: none; } +.hidden { display: none !important; } + +h2, h3 { margin-block-start: 2.5em; } +h4, h5 { margin-block-start: 2em; } + +.header + .header h3, +.header + .header h4, +.header + .header h5 { + margin-block-start: 1em; +} + +h1:target::before, +h2:target::before, +h3:target::before, +h4:target::before, +h5:target::before, +h6:target::before { + display: inline-block; + content: "»"; + margin-inline-start: -30px; + width: 30px; +} + +/* This is broken on Safari as of version 14, but is fixed + in Safari Technology Preview 117 which I think will be Safari 14.2. + https://bugs.webkit.org/show_bug.cgi?id=218076 +*/ +:target { + /* Safari does not support logical properties */ + scroll-margin-top: calc(var(--menu-bar-height) + 0.5em); +} + +.page { + outline: 0; + padding: 0 var(--page-padding); + margin-block-start: calc(0px - var(--menu-bar-height)); /* Compensate for the #menu-bar-hover-placeholder */ +} +.page-wrapper { + box-sizing: border-box; + background-color: var(--bg); +} +.no-js .page-wrapper, +.js:not(.sidebar-resizing) .page-wrapper { + transition: margin-left 0.3s ease, transform 0.3s ease; /* Animation: slide away */ +} +[dir=rtl] .js:not(.sidebar-resizing) .page-wrapper { + transition: margin-right 0.3s ease, transform 0.3s ease; /* Animation: slide away */ +} + +.content { + overflow-y: auto; + padding: 0 5px 50px 5px; +} +.content main { + margin-inline-start: auto; + margin-inline-end: auto; + max-width: var(--content-max-width); +} +.content p { line-height: 1.45em; } +.content ol { line-height: 1.45em; } +.content ul { line-height: 1.45em; } +.content a { text-decoration: none; } +.content a:hover { text-decoration: underline; } +.content img, .content video { max-width: 100%; } +.content .header:link, +.content .header:visited { + color: var(--fg); +} +.content .header:link, +.content .header:visited:hover { + text-decoration: none; +} + +table { + margin: 0 auto; + border-collapse: collapse; +} +table td { + padding: 3px 20px; + border: 1px var(--table-border-color) solid; +} +table thead { + background: var(--table-header-bg); +} +table thead td { + font-weight: 700; + border: none; +} +table thead th { + padding: 3px 20px; +} +table thead tr { + border: 1px var(--table-header-bg) solid; +} +/* Alternate background colors for rows */ +table tbody tr:nth-child(2n) { + background: var(--table-alternate-bg); +} + + +blockquote { + margin: 20px 0; + padding: 0 20px; + color: var(--fg); + background-color: var(--quote-bg); + border-block-start: .1em solid var(--quote-border); + border-block-end: .1em solid var(--quote-border); +} + +.warning { + margin: 20px; + padding: 0 20px; + border-inline-start: 2px solid var(--warning-border); +} + +.warning:before { + position: absolute; + width: 3rem; + height: 3rem; + margin-inline-start: calc(-1.5rem - 21px); + content: "ⓘ"; + text-align: center; + background-color: var(--bg); + color: var(--warning-border); + font-weight: bold; + font-size: 2rem; +} + +blockquote .warning:before { + background-color: var(--quote-bg); +} + +kbd { + background-color: var(--table-border-color); + border-radius: 4px; + border: solid 1px var(--theme-popup-border); + box-shadow: inset 0 -1px 0 var(--theme-hover); + display: inline-block; + font-size: var(--code-font-size); + font-family: var(--mono-font); + line-height: 10px; + padding: 4px 5px; + vertical-align: middle; +} + +:not(.footnote-definition) + .footnote-definition, +.footnote-definition + :not(.footnote-definition) { + margin-block-start: 2em; +} +.footnote-definition { + font-size: 0.9em; + margin: 0.5em 0; +} +.footnote-definition p { + display: inline; +} + +.tooltiptext { + position: absolute; + visibility: hidden; + color: #fff; + background-color: #333; + transform: translateX(-50%); /* Center by moving tooltip 50% of its width left */ + left: -8px; /* Half of the width of the icon */ + top: -35px; + font-size: 0.8em; + text-align: center; + border-radius: 6px; + padding: 5px 8px; + margin: 5px; + z-index: 1000; +} +.tooltipped .tooltiptext { + visibility: visible; +} + +.chapter li.part-title { + color: var(--sidebar-fg); + margin: 5px 0px; + font-weight: bold; +} + +.result-no-output { + font-style: italic; +} diff --git a/theme/css/kbd.css b/theme/css/kbd.css new file mode 100644 index 0000000..102b2b5 --- /dev/null +++ b/theme/css/kbd.css @@ -0,0 +1,26 @@ +.ayu, +.coal, +.navy { + --kbd-bg: var(--table-header-bg); + --kbd-border: var(--bg); +} + +.light { + --kbd-bg: var(--theme-hover); + --kbd-border: var(--table-header-bg); +} + +.rust { + --kbd-bg: var(--table-header-bg); + --kbd-border: var(--theme-hover); +} + +kbd { + margin: 0.1em 0.1em; + padding: 0.1em 0.6em; + font-family: sans-serif; + border-radius: 4px; + display: inline-block; + border: 1px var(--kbd-border) solid; + background-color: var(--kbd-bg); +} \ No newline at end of file diff --git a/theme/css/language-picker.css b/theme/css/language-picker.css new file mode 100644 index 0000000..20f01bc --- /dev/null +++ b/theme/css/language-picker.css @@ -0,0 +1,14 @@ +#language-list { + left: auto; + right: 10px; + } + + #language-list a { + color: inherit; + } + + [dir=rtl] #language-list { + left: 10px; + right: auto; + } + \ No newline at end of file diff --git a/theme/css/print.css b/theme/css/print.css new file mode 100644 index 0000000..80ec3a5 --- /dev/null +++ b/theme/css/print.css @@ -0,0 +1,50 @@ + +#sidebar, +#menu-bar, +.nav-chapters, +.mobile-nav-chapters { + display: none; +} + +#page-wrapper.page-wrapper { + transform: none !important; + margin-inline-start: 0px; + overflow-y: initial; +} + +#content { + max-width: none; + margin: 0; + padding: 0; +} + +.page { + overflow-y: initial; +} + +code { + direction: ltr !important; +} + +pre > .buttons { + z-index: 2; +} + +a, a:visited, a:active, a:hover { + color: #4183c4; + text-decoration: none; +} + +h1, h2, h3, h4, h5, h6 { + page-break-inside: avoid; + page-break-after: avoid; +} + +pre, code { + page-break-inside: avoid; + white-space: pre-wrap; +} + +.fa { + display: none !important; +} diff --git a/theme/css/rtl.css b/theme/css/rtl.css new file mode 100644 index 0000000..0278897 --- /dev/null +++ b/theme/css/rtl.css @@ -0,0 +1,10 @@ +[dir="rtl"] .hljs, +[dir="rtl"] pre > code { + text-align: left; +} +[dir="rtl"] #cookieBar { + direction: ltr; +} +[dir="rtl"] svg { + direction: ltr; +} diff --git a/theme/css/variables.css b/theme/css/variables.css new file mode 100644 index 0000000..0da55e8 --- /dev/null +++ b/theme/css/variables.css @@ -0,0 +1,279 @@ + +/* Globals */ + +:root { + --sidebar-width: 300px; + --sidebar-resize-indicator-width: 8px; + --sidebar-resize-indicator-space: 2px; + --page-padding: 15px; + --content-max-width: 750px; + --menu-bar-height: 50px; + --mono-font: "Source Code Pro", Consolas, "Ubuntu Mono", Menlo, "DejaVu Sans Mono", monospace, monospace; + --code-font-size: 0.875em /* please adjust the ace font size accordingly in editor.js */ +} + +/* Themes */ + +.ayu { + --bg: hsl(210, 25%, 8%); + --fg: #c5c5c5; + + --sidebar-bg: #14191f; + --sidebar-fg: #c8c9db; + --sidebar-non-existant: #5c6773; + --sidebar-active: #ffb454; + --sidebar-spacer: #2d334f; + + --scrollbar: var(--sidebar-fg); + + --icons: #737480; + --icons-hover: #b7b9cc; + + --links: #0096cf; + + --inline-code-color: #ffb454; + + --theme-popup-bg: #14191f; + --theme-popup-border: #5c6773; + --theme-hover: #191f26; + + --quote-bg: hsl(226, 15%, 17%); + --quote-border: hsl(226, 15%, 22%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(210, 25%, 13%); + --table-header-bg: hsl(210, 25%, 28%); + --table-alternate-bg: hsl(210, 25%, 11%); + + --searchbar-border-color: #848484; + --searchbar-bg: #424242; + --searchbar-fg: #fff; + --searchbar-shadow-color: #d4c89f; + --searchresults-header-fg: #666; + --searchresults-border-color: #888; + --searchresults-li-bg: #252932; + --search-mark-bg: #e3b171; + + --color-scheme: dark; +} + +.coal { + --bg: hsl(200, 7%, 8%); + --fg: #98a3ad; + + --sidebar-bg: #292c2f; + --sidebar-fg: #a1adb8; + --sidebar-non-existant: #505254; + --sidebar-active: #3473ad; + --sidebar-spacer: #393939; + + --scrollbar: var(--sidebar-fg); + + --icons: #43484d; + --icons-hover: #b3c0cc; + + --links: #2b79a2; + + --inline-code-color: #c5c8c6; + + --theme-popup-bg: #141617; + --theme-popup-border: #43484d; + --theme-hover: #1f2124; + + --quote-bg: hsl(234, 21%, 18%); + --quote-border: hsl(234, 21%, 23%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(200, 7%, 13%); + --table-header-bg: hsl(200, 7%, 28%); + --table-alternate-bg: hsl(200, 7%, 11%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #b7b7b7; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #666; + --searchresults-border-color: #98a3ad; + --searchresults-li-bg: #2b2b2f; + --search-mark-bg: #355c7d; + + --color-scheme: dark; +} + +.light { + --bg: hsl(0, 0%, 100%); + --fg: hsl(0, 0%, 0%); + + --sidebar-bg: #fafafa; + --sidebar-fg: hsl(0, 0%, 0%); + --sidebar-non-existant: #aaaaaa; + --sidebar-active: #1f1fff; + --sidebar-spacer: #f4f4f4; + + --scrollbar: #8F8F8F; + + --icons: #747474; + --icons-hover: #000000; + + --links: #20609f; + + --inline-code-color: #301900; + + --theme-popup-bg: #fafafa; + --theme-popup-border: #cccccc; + --theme-hover: #e6e6e6; + + --quote-bg: hsl(197, 37%, 96%); + --quote-border: hsl(197, 37%, 91%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(0, 0%, 95%); + --table-header-bg: hsl(0, 0%, 80%); + --table-alternate-bg: hsl(0, 0%, 97%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #fafafa; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #666; + --searchresults-border-color: #888; + --searchresults-li-bg: #e4f2fe; + --search-mark-bg: #a2cff5; + + --color-scheme: light; +} + +.navy { + --bg: hsl(226, 23%, 11%); + --fg: #bcbdd0; + + --sidebar-bg: #282d3f; + --sidebar-fg: #c8c9db; + --sidebar-non-existant: #505274; + --sidebar-active: #2b79a2; + --sidebar-spacer: #2d334f; + + --scrollbar: var(--sidebar-fg); + + --icons: #737480; + --icons-hover: #b7b9cc; + + --links: #2b79a2; + + --inline-code-color: #c5c8c6; + + --theme-popup-bg: #161923; + --theme-popup-border: #737480; + --theme-hover: #282e40; + + --quote-bg: hsl(226, 15%, 17%); + --quote-border: hsl(226, 15%, 22%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(226, 23%, 16%); + --table-header-bg: hsl(226, 23%, 31%); + --table-alternate-bg: hsl(226, 23%, 14%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #aeaec6; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #5f5f71; + --searchresults-border-color: #5c5c68; + --searchresults-li-bg: #242430; + --search-mark-bg: #a2cff5; + + --color-scheme: dark; +} + +.rust { + --bg: hsl(60, 9%, 87%); + --fg: #262625; + + --sidebar-bg: #3b2e2a; + --sidebar-fg: #c8c9db; + --sidebar-non-existant: #505254; + --sidebar-active: #e69f67; + --sidebar-spacer: #45373a; + + --scrollbar: var(--sidebar-fg); + + --icons: #737480; + --icons-hover: #262625; + + --links: #2b79a2; + + --inline-code-color: #6e6b5e; + + --theme-popup-bg: #e1e1db; + --theme-popup-border: #b38f6b; + --theme-hover: #99908a; + + --quote-bg: hsl(60, 5%, 75%); + --quote-border: hsl(60, 5%, 70%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(60, 9%, 82%); + --table-header-bg: #b3a497; + --table-alternate-bg: hsl(60, 9%, 84%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #fafafa; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #666; + --searchresults-border-color: #888; + --searchresults-li-bg: #dec2a2; + --search-mark-bg: #e69f67; + + --color-scheme: light; +} + +@media (prefers-color-scheme: dark) { + .light.no-js { + --bg: hsl(200, 7%, 8%); + --fg: #98a3ad; + + --sidebar-bg: #292c2f; + --sidebar-fg: #a1adb8; + --sidebar-non-existant: #505254; + --sidebar-active: #3473ad; + --sidebar-spacer: #393939; + + --scrollbar: var(--sidebar-fg); + + --icons: #43484d; + --icons-hover: #b3c0cc; + + --links: #2b79a2; + + --inline-code-color: #c5c8c6; + + --theme-popup-bg: #141617; + --theme-popup-border: #43484d; + --theme-hover: #1f2124; + + --quote-bg: hsl(234, 21%, 18%); + --quote-border: hsl(234, 21%, 23%); + + --warning-border: #ff8e00; + + --table-border-color: hsl(200, 7%, 13%); + --table-header-bg: hsl(200, 7%, 28%); + --table-alternate-bg: hsl(200, 7%, 11%); + + --searchbar-border-color: #aaa; + --searchbar-bg: #b7b7b7; + --searchbar-fg: #000; + --searchbar-shadow-color: #aaa; + --searchresults-header-fg: #666; + --searchresults-border-color: #98a3ad; + --searchresults-li-bg: #2b2b2f; + --search-mark-bg: #355c7d; + } +} diff --git a/theme/favicon.png b/theme/favicon.png new file mode 100644 index 0000000..a5b1aa1 Binary files /dev/null and b/theme/favicon.png differ diff --git a/theme/favicon.svg b/theme/favicon.svg new file mode 100644 index 0000000..90e0ea5 --- /dev/null +++ b/theme/favicon.svg @@ -0,0 +1,22 @@ + + + + + diff --git a/theme/fonts/OPEN-SANS-LICENSE.txt b/theme/fonts/OPEN-SANS-LICENSE.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/theme/fonts/OPEN-SANS-LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/theme/fonts/SOURCE-CODE-PRO-LICENSE.txt b/theme/fonts/SOURCE-CODE-PRO-LICENSE.txt new file mode 100644 index 0000000..366206f --- /dev/null +++ b/theme/fonts/SOURCE-CODE-PRO-LICENSE.txt @@ -0,0 +1,93 @@ +Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/theme/fonts/fonts.css b/theme/fonts/fonts.css new file mode 100644 index 0000000..858efa5 --- /dev/null +++ b/theme/fonts/fonts.css @@ -0,0 +1,100 @@ +/* Open Sans is licensed under the Apache License, Version 2.0. See http://www.apache.org/licenses/LICENSE-2.0 */ +/* Source Code Pro is under the Open Font License. See https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL */ + +/* open-sans-300 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 300; + src: local('Open Sans Light'), local('OpenSans-Light'), + url('open-sans-v17-all-charsets-300.woff2') format('woff2'); +} + +/* open-sans-300italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 300; + src: local('Open Sans Light Italic'), local('OpenSans-LightItalic'), + url('open-sans-v17-all-charsets-300italic.woff2') format('woff2'); +} + +/* open-sans-regular - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + src: local('Open Sans Regular'), local('OpenSans-Regular'), + url('open-sans-v17-all-charsets-regular.woff2') format('woff2'); +} + +/* open-sans-italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + src: local('Open Sans Italic'), local('OpenSans-Italic'), + url('open-sans-v17-all-charsets-italic.woff2') format('woff2'); +} + +/* open-sans-600 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 600; + src: local('Open Sans SemiBold'), local('OpenSans-SemiBold'), + url('open-sans-v17-all-charsets-600.woff2') format('woff2'); +} + +/* open-sans-600italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 600; + src: local('Open Sans SemiBold Italic'), local('OpenSans-SemiBoldItalic'), + url('open-sans-v17-all-charsets-600italic.woff2') format('woff2'); +} + +/* open-sans-700 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + src: local('Open Sans Bold'), local('OpenSans-Bold'), + url('open-sans-v17-all-charsets-700.woff2') format('woff2'); +} + +/* open-sans-700italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), + url('open-sans-v17-all-charsets-700italic.woff2') format('woff2'); +} + +/* open-sans-800 - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 800; + src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), + url('open-sans-v17-all-charsets-800.woff2') format('woff2'); +} + +/* open-sans-800italic - latin_vietnamese_latin-ext_greek-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 800; + src: local('Open Sans ExtraBold Italic'), local('OpenSans-ExtraBoldItalic'), + url('open-sans-v17-all-charsets-800italic.woff2') format('woff2'); +} + +/* source-code-pro-500 - latin_vietnamese_latin-ext_greek_cyrillic-ext_cyrillic */ +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 500; + src: url('source-code-pro-v11-all-charsets-500.woff2') format('woff2'); +} diff --git a/theme/fonts/open-sans-v17-all-charsets-300.woff2 b/theme/fonts/open-sans-v17-all-charsets-300.woff2 new file mode 100644 index 0000000..9f51be3 Binary files /dev/null and b/theme/fonts/open-sans-v17-all-charsets-300.woff2 differ diff --git a/theme/fonts/open-sans-v17-all-charsets-300italic.woff2 b/theme/fonts/open-sans-v17-all-charsets-300italic.woff2 new file mode 100644 index 0000000..2f54544 Binary files /dev/null and b/theme/fonts/open-sans-v17-all-charsets-300italic.woff2 differ diff --git a/theme/fonts/open-sans-v17-all-charsets-600.woff2 b/theme/fonts/open-sans-v17-all-charsets-600.woff2 new file mode 100644 index 0000000..f503d55 Binary files /dev/null and b/theme/fonts/open-sans-v17-all-charsets-600.woff2 differ diff --git a/theme/fonts/open-sans-v17-all-charsets-600italic.woff2 b/theme/fonts/open-sans-v17-all-charsets-600italic.woff2 new file mode 100644 index 0000000..c99aabe Binary files /dev/null and b/theme/fonts/open-sans-v17-all-charsets-600italic.woff2 differ diff --git a/theme/fonts/open-sans-v17-all-charsets-700.woff2 b/theme/fonts/open-sans-v17-all-charsets-700.woff2 new file mode 100644 index 0000000..421a1ab Binary files /dev/null and b/theme/fonts/open-sans-v17-all-charsets-700.woff2 differ diff --git a/theme/fonts/open-sans-v17-all-charsets-700italic.woff2 b/theme/fonts/open-sans-v17-all-charsets-700italic.woff2 new file mode 100644 index 0000000..12ce3d2 Binary files /dev/null and b/theme/fonts/open-sans-v17-all-charsets-700italic.woff2 differ diff --git a/theme/fonts/open-sans-v17-all-charsets-800.woff2 b/theme/fonts/open-sans-v17-all-charsets-800.woff2 new file mode 100644 index 0000000..c94a223 Binary files /dev/null and b/theme/fonts/open-sans-v17-all-charsets-800.woff2 differ diff --git a/theme/fonts/open-sans-v17-all-charsets-800italic.woff2 b/theme/fonts/open-sans-v17-all-charsets-800italic.woff2 new file mode 100644 index 0000000..eed7d3c Binary files /dev/null and b/theme/fonts/open-sans-v17-all-charsets-800italic.woff2 differ diff --git a/theme/fonts/open-sans-v17-all-charsets-italic.woff2 b/theme/fonts/open-sans-v17-all-charsets-italic.woff2 new file mode 100644 index 0000000..398b68a Binary files /dev/null and b/theme/fonts/open-sans-v17-all-charsets-italic.woff2 differ diff --git a/theme/fonts/open-sans-v17-all-charsets-regular.woff2 b/theme/fonts/open-sans-v17-all-charsets-regular.woff2 new file mode 100644 index 0000000..8383e94 Binary files /dev/null and b/theme/fonts/open-sans-v17-all-charsets-regular.woff2 differ diff --git a/theme/fonts/source-code-pro-v11-all-charsets-500.woff2 b/theme/fonts/source-code-pro-v11-all-charsets-500.woff2 new file mode 100644 index 0000000..7222456 Binary files /dev/null and b/theme/fonts/source-code-pro-v11-all-charsets-500.woff2 differ diff --git a/theme/head.hbs b/theme/head.hbs new file mode 100644 index 0000000..13c6108 --- /dev/null +++ b/theme/head.hbs @@ -0,0 +1,9 @@ + diff --git a/theme/highlight.css b/theme/highlight.css new file mode 100644 index 0000000..ba57b82 --- /dev/null +++ b/theme/highlight.css @@ -0,0 +1,82 @@ +/* + * An increased contrast highlighting scheme loosely based on the + * "Base16 Atelier Dune Light" theme by Bram de Haan + * (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) + * Original Base16 color scheme by Chris Kempson + * (https://github.com/chriskempson/base16) + */ + +/* Comment */ +.hljs-comment, +.hljs-quote { + color: #575757; +} + +/* Red */ +.hljs-variable, +.hljs-template-variable, +.hljs-attribute, +.hljs-tag, +.hljs-name, +.hljs-regexp, +.hljs-link, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class { + color: #d70025; +} + +/* Orange */ +.hljs-number, +.hljs-meta, +.hljs-built_in, +.hljs-builtin-name, +.hljs-literal, +.hljs-type, +.hljs-params { + color: #b21e00; +} + +/* Green */ +.hljs-string, +.hljs-symbol, +.hljs-bullet { + color: #008200; +} + +/* Blue */ +.hljs-title, +.hljs-section { + color: #0030f2; +} + +/* Purple */ +.hljs-keyword, +.hljs-selector-tag { + color: #9d00ec; +} + +.hljs { + display: block; + overflow-x: auto; + background: #f6f7f6; + color: #000; +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} + +.hljs-addition { + color: #22863a; + background-color: #f0fff4; +} + +.hljs-deletion { + color: #b31d28; + background-color: #ffeef0; +} diff --git a/theme/highlight.js b/theme/highlight.js new file mode 100644 index 0000000..3256c00 --- /dev/null +++ b/theme/highlight.js @@ -0,0 +1,53 @@ +/* + Highlight.js 10.1.1 (93fd0d73) + License: BSD-3-Clause + Copyright (c) 2006-2020, Ivan Sagalaev +*/ +var hljs=function(){"use strict";function e(n){Object.freeze(n);var t="function"==typeof n;return Object.getOwnPropertyNames(n).forEach((function(r){!Object.hasOwnProperty.call(n,r)||null===n[r]||"object"!=typeof n[r]&&"function"!=typeof n[r]||t&&("caller"===r||"callee"===r||"arguments"===r)||Object.isFrozen(n[r])||e(n[r])})),n}class n{constructor(e){void 0===e.data&&(e.data={}),this.data=e.data}ignoreMatch(){this.ignore=!0}}function t(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function r(e,...n){var t={};for(const n in e)t[n]=e[n];return n.forEach((function(e){for(const n in e)t[n]=e[n]})),t}function a(e){return e.nodeName.toLowerCase()}var i=Object.freeze({__proto__:null,escapeHTML:t,inherit:r,nodeStream:function(e){var n=[];return function e(t,r){for(var i=t.firstChild;i;i=i.nextSibling)3===i.nodeType?r+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:r,node:i}),r=e(i,r),a(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:r,node:i}));return r}(e,0),n},mergeStreams:function(e,n,r){var i=0,s="",o=[];function l(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset"}function u(e){s+=""}function d(e){("start"===e.event?c:u)(e.node)}for(;e.length||n.length;){var g=l();if(s+=t(r.substring(i,g[0].offset)),i=g[0].offset,g===e){o.reverse().forEach(u);do{d(g.splice(0,1)[0]),g=l()}while(g===e&&g.length&&g[0].offset===i);o.reverse().forEach(c)}else"start"===g[0].event?o.push(g[0].node):o.pop(),d(g.splice(0,1)[0])}return s+t(r.substr(i))}});const s="",o=e=>!!e.kind;class l{constructor(e,n){this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){this.buffer+=t(e)}openNode(e){if(!o(e))return;let n=e.kind;e.sublanguage||(n=`${this.classPrefix}${n}`),this.span(n)}closeNode(e){o(e)&&(this.buffer+=s)}value(){return this.buffer}span(e){this.buffer+=``}}class c{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const n={kind:e,children:[]};this.add(n),this.stack.push(n)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n),n.children.forEach(n=>this._walk(e,n)),e.closeNode(n)),e}static _collapse(e){"string"!=typeof e&&e.children&&(e.children.every(e=>"string"==typeof e)?e.children=[e.children.join("")]:e.children.forEach(e=>{c._collapse(e)}))}}class u extends c{constructor(e){super(),this.options=e}addKeyword(e,n){""!==e&&(this.openNode(n),this.addText(e),this.closeNode())}addText(e){""!==e&&this.add(e)}addSublanguage(e,n){const t=e.root;t.kind=n,t.sublanguage=!0,this.add(t)}toHTML(){return new l(this,this.options).value()}finalize(){return!0}}function d(e){return e?"string"==typeof e?e:e.source:null}const g="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",h={begin:"\\\\[\\s\\S]",relevance:0},f={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[h]},p={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[h]},b={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},m=function(e,n,t={}){var a=r({className:"comment",begin:e,end:n,contains:[]},t);return a.contains.push(b),a.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),a},v=m("//","$"),x=m("/\\*","\\*/"),E=m("#","$");var _=Object.freeze({__proto__:null,IDENT_RE:"[a-zA-Z]\\w*",UNDERSCORE_IDENT_RE:"[a-zA-Z_]\\w*",NUMBER_RE:"\\b\\d+(\\.\\d+)?",C_NUMBER_RE:g,BINARY_NUMBER_RE:"\\b(0b[01]+)",RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(e={})=>{const n=/^#![ ]*\//;return e.binary&&(e.begin=function(...e){return e.map(e=>d(e)).join("")}(n,/.*\b/,e.binary,/\b.*/)),r({className:"meta",begin:n,end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)},BACKSLASH_ESCAPE:h,APOS_STRING_MODE:f,QUOTE_STRING_MODE:p,PHRASAL_WORDS_MODE:b,COMMENT:m,C_LINE_COMMENT_MODE:v,C_BLOCK_COMMENT_MODE:x,HASH_COMMENT_MODE:E,NUMBER_MODE:{className:"number",begin:"\\b\\d+(\\.\\d+)?",relevance:0},C_NUMBER_MODE:{className:"number",begin:g,relevance:0},BINARY_NUMBER_MODE:{className:"number",begin:"\\b(0b[01]+)",relevance:0},CSS_NUMBER_MODE:{className:"number",begin:"\\b\\d+(\\.\\d+)?(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},REGEXP_MODE:{begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[h,{begin:/\[/,end:/\]/,relevance:0,contains:[h]}]}]},TITLE_MODE:{className:"title",begin:"[a-zA-Z]\\w*",relevance:0},UNDERSCORE_TITLE_MODE:{className:"title",begin:"[a-zA-Z_]\\w*",relevance:0},METHOD_GUARD:{begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0},END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{n.data._beginMatch!==e[1]&&n.ignoreMatch()}})}}),N="of and for in not or if then".split(" ");function w(e,n){return n?+n:function(e){return N.includes(e.toLowerCase())}(e)?0:1}const R=t,y=r,{nodeStream:k,mergeStreams:O}=i,M=Symbol("nomatch");return function(t){var a=[],i={},s={},o=[],l=!0,c=/(^(<[^>]+>|\t|)+|\n)/gm,g="Could not find the language '{}', did you forget to load/include a language module?";const h={disableAutodetect:!0,name:"Plain text",contains:[]};var f={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:null,__emitter:u};function p(e){return f.noHighlightRe.test(e)}function b(e,n,t,r){var a={code:n,language:e};S("before:highlight",a);var i=a.result?a.result:m(a.language,a.code,t,r);return i.code=a.code,S("after:highlight",i),i}function m(e,t,a,s){var o=t;function c(e,n){var t=E.case_insensitive?n[0].toLowerCase():n[0];return Object.prototype.hasOwnProperty.call(e.keywords,t)&&e.keywords[t]}function u(){null!=y.subLanguage?function(){if(""!==A){var e=null;if("string"==typeof y.subLanguage){if(!i[y.subLanguage])return void O.addText(A);e=m(y.subLanguage,A,!0,k[y.subLanguage]),k[y.subLanguage]=e.top}else e=v(A,y.subLanguage.length?y.subLanguage:null);y.relevance>0&&(I+=e.relevance),O.addSublanguage(e.emitter,e.language)}}():function(){if(!y.keywords)return void O.addText(A);let e=0;y.keywordPatternRe.lastIndex=0;let n=y.keywordPatternRe.exec(A),t="";for(;n;){t+=A.substring(e,n.index);const r=c(y,n);if(r){const[e,a]=r;O.addText(t),t="",I+=a,O.addKeyword(n[0],e)}else t+=n[0];e=y.keywordPatternRe.lastIndex,n=y.keywordPatternRe.exec(A)}t+=A.substr(e),O.addText(t)}(),A=""}function h(e){return e.className&&O.openNode(e.className),y=Object.create(e,{parent:{value:y}})}function p(e){return 0===y.matcher.regexIndex?(A+=e[0],1):(L=!0,0)}var b={};function x(t,r){var i=r&&r[0];if(A+=t,null==i)return u(),0;if("begin"===b.type&&"end"===r.type&&b.index===r.index&&""===i){if(A+=o.slice(r.index,r.index+1),!l){const n=Error("0 width match regex");throw n.languageName=e,n.badRule=b.rule,n}return 1}if(b=r,"begin"===r.type)return function(e){var t=e[0],r=e.rule;const a=new n(r),i=[r.__beforeBegin,r["on:begin"]];for(const n of i)if(n&&(n(e,a),a.ignore))return p(t);return r&&r.endSameAsBegin&&(r.endRe=RegExp(t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")),r.skip?A+=t:(r.excludeBegin&&(A+=t),u(),r.returnBegin||r.excludeBegin||(A=t)),h(r),r.returnBegin?0:t.length}(r);if("illegal"===r.type&&!a){const e=Error('Illegal lexeme "'+i+'" for mode "'+(y.className||"")+'"');throw e.mode=y,e}if("end"===r.type){var s=function(e){var t=e[0],r=o.substr(e.index),a=function e(t,r,a){let i=function(e,n){var t=e&&e.exec(n);return t&&0===t.index}(t.endRe,a);if(i){if(t["on:end"]){const e=new n(t);t["on:end"](r,e),e.ignore&&(i=!1)}if(i){for(;t.endsParent&&t.parent;)t=t.parent;return t}}if(t.endsWithParent)return e(t.parent,r,a)}(y,e,r);if(!a)return M;var i=y;i.skip?A+=t:(i.returnEnd||i.excludeEnd||(A+=t),u(),i.excludeEnd&&(A=t));do{y.className&&O.closeNode(),y.skip||y.subLanguage||(I+=y.relevance),y=y.parent}while(y!==a.parent);return a.starts&&(a.endSameAsBegin&&(a.starts.endRe=a.endRe),h(a.starts)),i.returnEnd?0:t.length}(r);if(s!==M)return s}if("illegal"===r.type&&""===i)return 1;if(B>1e5&&B>3*r.index)throw Error("potential infinite loop, way more iterations than matches");return A+=i,i.length}var E=T(e);if(!E)throw console.error(g.replace("{}",e)),Error('Unknown language: "'+e+'"');var _=function(e){function n(n,t){return RegExp(d(n),"m"+(e.case_insensitive?"i":"")+(t?"g":""))}class t{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,n){n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]),this.matchAt+=function(e){return RegExp(e.toString()+"|").exec("").length-1}(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map(e=>e[1]);this.matcherRe=n(function(e,n="|"){for(var t=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./,r=0,a="",i=0;i0&&(a+=n),a+="(";o.length>0;){var l=t.exec(o);if(null==l){a+=o;break}a+=o.substring(0,l.index),o=o.substring(l.index+l[0].length),"\\"===l[0][0]&&l[1]?a+="\\"+(+l[1]+s):(a+=l[0],"("===l[0]&&r++)}a+=")"}return a}(e),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const n=this.matcherRe.exec(e);if(!n)return null;const t=n.findIndex((e,n)=>n>0&&void 0!==e),r=this.matchIndexes[t];return n.splice(0,t),Object.assign(n,r)}}class a{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const n=new t;return this.rules.slice(e).forEach(([e,t])=>n.addRule(e,t)),n.compile(),this.multiRegexes[e]=n,n}considerAll(){this.regexIndex=0}addRule(e,n){this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex;const t=n.exec(e);return t&&(this.regexIndex+=t.position+1,this.regexIndex===this.count&&(this.regexIndex=0)),t}}function i(e,n){const t=e.input[e.index-1],r=e.input[e.index+e[0].length];"."!==t&&"."!==r||n.ignoreMatch()}if(e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return function t(s,o){const l=s;if(s.compiled)return l;s.compiled=!0,s.__beforeBegin=null,s.keywords=s.keywords||s.beginKeywords;let c=null;if("object"==typeof s.keywords&&(c=s.keywords.$pattern,delete s.keywords.$pattern),s.keywords&&(s.keywords=function(e,n){var t={};return"string"==typeof e?r("keyword",e):Object.keys(e).forEach((function(n){r(n,e[n])})),t;function r(e,r){n&&(r=r.toLowerCase()),r.split(" ").forEach((function(n){var r=n.split("|");t[r[0]]=[e,w(r[0],r[1])]}))}}(s.keywords,e.case_insensitive)),s.lexemes&&c)throw Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ");return l.keywordPatternRe=n(s.lexemes||c||/\w+/,!0),o&&(s.beginKeywords&&(s.begin="\\b("+s.beginKeywords.split(" ").join("|")+")(?=\\b|\\s)",s.__beforeBegin=i),s.begin||(s.begin=/\B|\b/),l.beginRe=n(s.begin),s.endSameAsBegin&&(s.end=s.begin),s.end||s.endsWithParent||(s.end=/\B|\b/),s.end&&(l.endRe=n(s.end)),l.terminator_end=d(s.end)||"",s.endsWithParent&&o.terminator_end&&(l.terminator_end+=(s.end?"|":"")+o.terminator_end)),s.illegal&&(l.illegalRe=n(s.illegal)),void 0===s.relevance&&(s.relevance=1),s.contains||(s.contains=[]),s.contains=[].concat(...s.contains.map((function(e){return function(e){return e.variants&&!e.cached_variants&&(e.cached_variants=e.variants.map((function(n){return r(e,{variants:null},n)}))),e.cached_variants?e.cached_variants:function e(n){return!!n&&(n.endsWithParent||e(n.starts))}(e)?r(e,{starts:e.starts?r(e.starts):null}):Object.isFrozen(e)?r(e):e}("self"===e?s:e)}))),s.contains.forEach((function(e){t(e,l)})),s.starts&&t(s.starts,o),l.matcher=function(e){const n=new a;return e.contains.forEach(e=>n.addRule(e.begin,{rule:e,type:"begin"})),e.terminator_end&&n.addRule(e.terminator_end,{type:"end"}),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n}(l),l}(e)}(E),N="",y=s||_,k={},O=new f.__emitter(f);!function(){for(var e=[],n=y;n!==E;n=n.parent)n.className&&e.unshift(n.className);e.forEach(e=>O.openNode(e))}();var A="",I=0,S=0,B=0,L=!1;try{for(y.matcher.considerAll();;){B++,L?L=!1:(y.matcher.lastIndex=S,y.matcher.considerAll());const e=y.matcher.exec(o);if(!e)break;const n=x(o.substring(S,e.index),e);S=e.index+n}return x(o.substr(S)),O.closeAllNodes(),O.finalize(),N=O.toHTML(),{relevance:I,value:N,language:e,illegal:!1,emitter:O,top:y}}catch(n){if(n.message&&n.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:n.message,context:o.slice(S-100,S+100),mode:n.mode},sofar:N,relevance:0,value:R(o),emitter:O};if(l)return{illegal:!1,relevance:0,value:R(o),emitter:O,language:e,top:y,errorRaised:n};throw n}}function v(e,n){n=n||f.languages||Object.keys(i);var t=function(e){const n={relevance:0,emitter:new f.__emitter(f),value:R(e),illegal:!1,top:h};return n.emitter.addText(e),n}(e),r=t;return n.filter(T).filter(I).forEach((function(n){var a=m(n,e,!1);a.language=n,a.relevance>r.relevance&&(r=a),a.relevance>t.relevance&&(r=t,t=a)})),r.language&&(t.second_best=r),t}function x(e){return f.tabReplace||f.useBR?e.replace(c,e=>"\n"===e?f.useBR?"
":e:f.tabReplace?e.replace(/\t/g,f.tabReplace):e):e}function E(e){let n=null;const t=function(e){var n=e.className+" ";n+=e.parentNode?e.parentNode.className:"";const t=f.languageDetectRe.exec(n);if(t){var r=T(t[1]);return r||(console.warn(g.replace("{}",t[1])),console.warn("Falling back to no-highlight mode for this block.",e)),r?t[1]:"no-highlight"}return n.split(/\s+/).find(e=>p(e)||T(e))}(e);if(p(t))return;S("before:highlightBlock",{block:e,language:t}),f.useBR?(n=document.createElement("div")).innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n"):n=e;const r=n.textContent,a=t?b(t,r,!0):v(r),i=k(n);if(i.length){const e=document.createElement("div");e.innerHTML=a.value,a.value=O(i,k(e),r)}a.value=x(a.value),S("after:highlightBlock",{block:e,result:a}),e.innerHTML=a.value,e.className=function(e,n,t){var r=n?s[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),e.includes(r)||a.push(r),a.join(" ").trim()}(e.className,t,a.language),e.result={language:a.language,re:a.relevance,relavance:a.relevance},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.relevance,relavance:a.second_best.relevance})}const N=()=>{if(!N.called){N.called=!0;var e=document.querySelectorAll("pre code");a.forEach.call(e,E)}};function T(e){return e=(e||"").toLowerCase(),i[e]||i[s[e]]}function A(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach(e=>{s[e]=n})}function I(e){var n=T(e);return n&&!n.disableAutodetect}function S(e,n){var t=e;o.forEach((function(e){e[t]&&e[t](n)}))}Object.assign(t,{highlight:b,highlightAuto:v,fixMarkup:x,highlightBlock:E,configure:function(e){f=y(f,e)},initHighlighting:N,initHighlightingOnLoad:function(){window.addEventListener("DOMContentLoaded",N,!1)},registerLanguage:function(e,n){var r=null;try{r=n(t)}catch(n){if(console.error("Language definition for '{}' could not be registered.".replace("{}",e)),!l)throw n;console.error(n),r=h}r.name||(r.name=e),i[e]=r,r.rawDefinition=n.bind(null,t),r.aliases&&A(r.aliases,{languageName:e})},listLanguages:function(){return Object.keys(i)},getLanguage:T,registerAliases:A,requireLanguage:function(e){var n=T(e);if(n)return n;throw Error("The '{}' language is required, but not loaded.".replace("{}",e))},autoDetection:I,inherit:y,addPlugin:function(e){o.push(e)}}),t.debugMode=function(){l=!1},t.safeMode=function(){l=!0},t.versionString="10.1.1";for(const n in _)"object"==typeof _[n]&&e(_[n]);return Object.assign(t,_),t}({})}();"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs); +hljs.registerLanguage("apache",function(){"use strict";return function(e){var n={className:"number",begin:"\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?"};return{name:"Apache config",aliases:["apacheconf"],case_insensitive:!0,contains:[e.HASH_COMMENT_MODE,{className:"section",begin:"",contains:[n,{className:"number",begin:":\\d{1,5}"},e.inherit(e.QUOTE_STRING_MODE,{relevance:0})]},{className:"attribute",begin:/\w+/,relevance:0,keywords:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{end:/$/,relevance:0,keywords:{literal:"on off all deny allow"},contains:[{className:"meta",begin:"\\s\\[",end:"\\]$"},{className:"variable",begin:"[\\$%]\\{",end:"\\}",contains:["self",{className:"number",begin:"[\\$%]\\d+"}]},n,{className:"number",begin:"\\d+"},e.QUOTE_STRING_MODE]}}],illegal:/\S/}}}()); +hljs.registerLanguage("bash",function(){"use strict";return function(e){const s={};Object.assign(s,{className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{/,end:/\}/,contains:[{begin:/:-/,contains:[s]}]}]});const t={className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},n={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,s,t]};t.contains.push(n);const a={begin:/\$\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,s]},i=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10}),c={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b-?[a-z\._]+\b/,keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},contains:[i,e.SHEBANG(),c,a,e.HASH_COMMENT_MODE,n,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},s]}}}()); +hljs.registerLanguage("c-like",function(){"use strict";return function(e){function t(e){return"(?:"+e+")?"}var n="(decltype\\(auto\\)|"+t("[a-zA-Z_]\\w*::")+"[a-zA-Z_]\\w*"+t("<.*?>")+")",r={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},a={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},i={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},s={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(a,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},o={className:"title",begin:t("[a-zA-Z_]\\w*::")+e.IDENT_RE,relevance:0},c=t("[a-zA-Z_]\\w*::")+e.IDENT_RE+"\\s*\\(",l={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_t short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary",literal:"true false nullptr NULL"},d=[r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,i,a],_={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:l,contains:d.concat([{begin:/\(/,end:/\)/,keywords:l,contains:d.concat(["self"]),relevance:0}]),relevance:0},u={className:"function",begin:"("+n+"[\\*&\\s]+)+"+c,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:l,illegal:/[^\w\s\*&:<>]/,contains:[{begin:"decltype\\(auto\\)",keywords:l,relevance:0},{begin:c,returnBegin:!0,contains:[o],relevance:0},{className:"params",begin:/\(/,end:/\)/,keywords:l,relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,i,r,{begin:/\(/,end:/\)/,keywords:l,relevance:0,contains:["self",e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,i,r]}]},r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s]};return{aliases:["c","cc","h","c++","h++","hpp","hh","hxx","cxx"],keywords:l,disableAutodetect:!0,illegal:"",keywords:l,contains:["self",r]},{begin:e.IDENT_RE+"::",keywords:l},{className:"class",beginKeywords:"class struct",end:/[{;:]/,contains:[{begin://,contains:["self"]},e.TITLE_MODE]}]),exports:{preprocessor:s,strings:a,keywords:l}}}}()); +hljs.registerLanguage("c",function(){"use strict";return function(e){var n=e.getLanguage("c-like").rawDefinition();return n.name="C",n.aliases=["c","h"],n}}()); +hljs.registerLanguage("coffeescript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);return function(r){var t={keyword:e.concat(["then","unless","until","loop","by","when","and","or","is","isnt","not"]).filter((e=>n=>!e.includes(n))(["var","const","let","function","static"])).join(" "),literal:n.concat(["yes","no","on","off"]).join(" "),built_in:a.concat(["npm","print"]).join(" ")},i="[A-Za-z$_][0-9A-Za-z$_]*",s={className:"subst",begin:/#\{/,end:/}/,keywords:t},o=[r.BINARY_NUMBER_MODE,r.inherit(r.C_NUMBER_MODE,{starts:{end:"(\\s*/)?",relevance:0}}),{className:"string",variants:[{begin:/'''/,end:/'''/,contains:[r.BACKSLASH_ESCAPE]},{begin:/'/,end:/'/,contains:[r.BACKSLASH_ESCAPE]},{begin:/"""/,end:/"""/,contains:[r.BACKSLASH_ESCAPE,s]},{begin:/"/,end:/"/,contains:[r.BACKSLASH_ESCAPE,s]}]},{className:"regexp",variants:[{begin:"///",end:"///",contains:[s,r.HASH_COMMENT_MODE]},{begin:"//[gim]{0,3}(?=\\W)",relevance:0},{begin:/\/(?![ *]).*?(?![\\]).\/[gim]{0,3}(?=\W)/}]},{begin:"@"+i},{subLanguage:"javascript",excludeBegin:!0,excludeEnd:!0,variants:[{begin:"```",end:"```"},{begin:"`",end:"`"}]}];s.contains=o;var c=r.inherit(r.TITLE_MODE,{begin:i}),l={className:"params",begin:"\\([^\\(]",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:t,contains:["self"].concat(o)}]};return{name:"CoffeeScript",aliases:["coffee","cson","iced"],keywords:t,illegal:/\/\*/,contains:o.concat([r.COMMENT("###","###"),r.HASH_COMMENT_MODE,{className:"function",begin:"^\\s*"+i+"\\s*=\\s*(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[c,l]},{begin:/[:\(,=]\s*/,relevance:0,contains:[{className:"function",begin:"(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[l]}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[c]},c]},{begin:i+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}}()); +hljs.registerLanguage("cpp",function(){"use strict";return function(e){var t=e.getLanguage("c-like").rawDefinition();return t.disableAutodetect=!1,t.name="C++",t.aliases=["cc","c++","h++","hpp","hh","hxx","cxx"],t}}()); +hljs.registerLanguage("csharp",function(){"use strict";return function(e){var n={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let nameof on orderby partial remove select set value var when where yield",literal:"null false true"},i=e.inherit(e.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),a={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},s={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},t=e.inherit(s,{illegal:/\n/}),l={className:"subst",begin:"{",end:"}",keywords:n},r=e.inherit(l,{illegal:/\n/}),c={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},e.BACKSLASH_ESCAPE,r]},o={className:"string",begin:/\$@"/,end:'"',contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},l]},g=e.inherit(o,{illegal:/\n/,contains:[{begin:"{{"},{begin:"}}"},{begin:'""'},r]});l.contains=[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_BLOCK_COMMENT_MODE],r.contains=[g,c,t,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.inherit(e.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];var d={variants:[o,c,s,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},E={begin:"<",end:">",contains:[{beginKeywords:"in out"},i]},_=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",b={begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],keywords:n,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:"\x3c!--|--\x3e"},{begin:""}]}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},d,a,{beginKeywords:"class interface",end:/[{;=]/,illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"},i,E,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",end:/[{;=]/,illegal:/[^\s:]/,contains:[i,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"meta-string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+_+"\\s+)+"+e.IDENT_RE+"\\s*(\\<.+\\>)?\\s*\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{begin:e.IDENT_RE+"\\s*(\\<.+\\>)?\\s*\\(",returnBegin:!0,contains:[e.TITLE_MODE,E],relevance:0},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0,contains:[d,a,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},b]}}}()); +hljs.registerLanguage("css",function(){"use strict";return function(e){var n={begin:/(?:[A-Z\_\.\-]+|--[a-zA-Z0-9_-]+)\s*:/,returnBegin:!0,end:";",endsWithParent:!0,contains:[{className:"attribute",begin:/\S/,end:":",excludeEnd:!0,starts:{endsWithParent:!0,excludeEnd:!0,contains:[{begin:/[\w-]+\(/,returnBegin:!0,contains:[{className:"built_in",begin:/[\w-]+/},{begin:/\(/,end:/\)/,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{className:"number",begin:"#[0-9A-Fa-f]+"},{className:"meta",begin:"!important"}]}}]};return{name:"CSS",case_insensitive:!0,illegal:/[=\/|'\$]/,contains:[e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/},{className:"selector-class",begin:/\.[A-Za-z0-9_-]+/},{className:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"@(page|font-face)",lexemes:"@[a-z-]+",keywords:"@page @font-face"},{begin:"@",end:"[{;]",illegal:/:/,returnBegin:!0,contains:[{className:"keyword",begin:/@\-?\w[\w]*(\-\w+)*/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:"and or not only",contains:[{begin:/[a-z-]+:/,className:"attribute"},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0},{begin:"{",end:"}",illegal:/\S/,contains:[e.C_BLOCK_COMMENT_MODE,n]}]}}}()); +hljs.registerLanguage("diff",function(){"use strict";return function(e){return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,variants:[{begin:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{begin:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{begin:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{className:"comment",variants:[{begin:/Index: /,end:/$/},{begin:/={3,}/,end:/$/},{begin:/^\-{3}/,end:/$/},{begin:/^\*{3} /,end:/$/},{begin:/^\+{3}/,end:/$/},{begin:/^\*{15}$/}]},{className:"addition",begin:"^\\+",end:"$"},{className:"deletion",begin:"^\\-",end:"$"},{className:"addition",begin:"^\\!",end:"$"}]}}}()); +hljs.registerLanguage("go",function(){"use strict";return function(e){var n={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",literal:"true false iota nil",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{name:"Go",aliases:["golang"],keywords:n,illegal:"e(n)).join("")}return function(a){var s={className:"number",relevance:0,variants:[{begin:/([\+\-]+)?[\d]+_[\d_]+/},{begin:a.NUMBER_RE}]},i=a.COMMENT();i.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];var t={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)}/}]},r={className:"literal",begin:/\bon|off|true|false|yes|no\b/},l={className:"string",contains:[a.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}]},c={begin:/\[/,end:/\]/,contains:[i,r,t,l,s,"self"],relevance:0},g="("+[/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/].map(n=>e(n)).join("|")+")";return{name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/,contains:[i,{className:"section",begin:/\[+/,end:/\]+/},{begin:n(g,"(\\s*\\.\\s*",g,")*",n("(?=",/\s*=\s*[^#\s]/,")")),className:"attr",starts:{end:/$/,contains:[i,c,r,t,l,s]}}]}}}()); +hljs.registerLanguage("java",function(){"use strict";function e(e){return e?"string"==typeof e?e:e.source:null}function n(e){return a("(",e,")?")}function a(...n){return n.map(n=>e(n)).join("")}function s(...n){return"("+n.map(n=>e(n)).join("|")+")"}return function(e){var t="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",i={className:"meta",begin:"@[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},r=e=>a("[",e,"]+([",e,"_]*[",e,"]+)?"),c={className:"number",variants:[{begin:`\\b(0[bB]${r("01")})[lL]?`},{begin:`\\b(0${r("0-7")})[dDfFlL]?`},{begin:a(/\b0[xX]/,s(a(r("a-fA-F0-9"),/\./,r("a-fA-F0-9")),a(r("a-fA-F0-9"),/\.?/),a(/\./,r("a-fA-F0-9"))),/([pP][+-]?(\d+))?/,/[fFdDlL]?/)},{begin:a(/\b/,s(a(/\d*\./,r("\\d")),r("\\d")),/[eE][+-]?[\d]+[dDfF]?/)},{begin:a(/\b/,r(/\d/),n(/\.?/),n(r(/\d/)),/[dDfFlL]?/)}],relevance:0};return{name:"Java",aliases:["jsp"],keywords:t,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"class",beginKeywords:"class interface",end:/[{;=]/,excludeEnd:!0,keywords:"class interface",illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"new throw return else",relevance:0},{className:"function",begin:"([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\s+)+"+e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:t,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,keywords:t,relevance:0,contains:[i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},c,i]}}}()); +hljs.registerLanguage("javascript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);function s(e){return r("(?=",e,")")}function r(...e){return e.map(e=>(function(e){return e?"string"==typeof e?e:e.source:null})(e)).join("")}return function(t){var i="[A-Za-z$_][0-9A-Za-z$_]*",c={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/},o={$pattern:"[A-Za-z$_][0-9A-Za-z$_]*",keyword:e.join(" "),literal:n.join(" "),built_in:a.join(" ")},l={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:t.C_NUMBER_RE+"n?"}],relevance:0},E={className:"subst",begin:"\\$\\{",end:"\\}",keywords:o,contains:[]},d={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:"xml"}},g={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,E],subLanguage:"css"}},u={className:"string",begin:"`",end:"`",contains:[t.BACKSLASH_ESCAPE,E]};E.contains=[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,d,g,u,l,t.REGEXP_MODE];var b=E.contains.concat([{begin:/\(/,end:/\)/,contains:["self"].concat(E.contains,[t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE])},t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE]),_={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:b};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:o,contains:[t.SHEBANG({binary:"node",relevance:5}),{className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,d,g,u,t.C_LINE_COMMENT_MODE,t.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+",contains:[{className:"type",begin:"\\{",end:"\\}",relevance:0},{className:"variable",begin:i+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),t.C_BLOCK_COMMENT_MODE,l,{begin:r(/[{,\n]\s*/,s(r(/(((\/\/.*)|(\/\*(.|\n)*\*\/))\s*)*/,i+"\\s*:"))),relevance:0,contains:[{className:"attr",begin:i+s("\\s*:"),relevance:0}]},{begin:"("+t.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE,t.REGEXP_MODE,{className:"function",begin:"(\\([^(]*(\\([^(]*(\\([^(]*\\))?\\))?\\)|"+t.UNDERSCORE_IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:t.UNDERSCORE_IDENT_RE},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:o,contains:b}]}]},{begin:/,/,relevance:0},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:"<>",end:""},{begin:c.begin,end:c.end}],subLanguage:"xml",contains:[{begin:c.begin,end:c.end,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[t.inherit(t.TITLE_MODE,{begin:i}),_],illegal:/\[|%/},{begin:/\$[(.]/},t.METHOD_GUARD,{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends"},t.UNDERSCORE_TITLE_MODE]},{beginKeywords:"constructor",end:/\{/,excludeEnd:!0},{begin:"(get|set)\\s+(?="+i+"\\()",end:/{/,keywords:"get set",contains:[t.inherit(t.TITLE_MODE,{begin:i}),{begin:/\(\)/},_]}],illegal:/#(?!!)/}}}()); +hljs.registerLanguage("json",function(){"use strict";return function(n){var e={literal:"true false null"},i=[n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE],t=[n.QUOTE_STRING_MODE,n.C_NUMBER_MODE],a={end:",",endsWithParent:!0,excludeEnd:!0,contains:t,keywords:e},l={begin:"{",end:"}",contains:[{className:"attr",begin:/"/,end:/"/,contains:[n.BACKSLASH_ESCAPE],illegal:"\\n"},n.inherit(a,{begin:/:/})].concat(i),illegal:"\\S"},s={begin:"\\[",end:"\\]",contains:[n.inherit(a)],illegal:"\\S"};return t.push(l,s),i.forEach((function(n){t.push(n)})),{name:"JSON",contains:t,keywords:e,illegal:"\\S"}}}()); +hljs.registerLanguage("kotlin",function(){"use strict";return function(e){var n={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual trait volatile transient native default",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},a={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@"},i={className:"subst",begin:"\\${",end:"}",contains:[e.C_NUMBER_MODE]},s={className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},t={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[s,i]},{begin:"'",end:"'",illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,s,i]}]};i.contains.push(t);var r={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?"},l={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[e.inherit(t,{className:"meta-string"})]}]},c=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),o={variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},d=o;return d.variants[1].contains=[o],o.variants[1].contains=[d],{name:"Kotlin",aliases:["kt"],keywords:n,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,c,{className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},a,r,l,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:n,illegal:/fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/,relevance:5,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[o,e.C_LINE_COMMENT_MODE,c],relevance:0},e.C_LINE_COMMENT_MODE,c,r,l,t,e.C_NUMBER_MODE]},c]},{className:"class",beginKeywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,]|$/,excludeBegin:!0,returnEnd:!0},r,l]},t,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:"\n"},{className:"number",begin:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",relevance:0}]}}}()); +hljs.registerLanguage("less",function(){"use strict";return function(e){var n="([\\w-]+|@{[\\w-]+})",a=[],s=[],t=function(e){return{className:"string",begin:"~?"+e+".*?"+e}},r=function(e,n,a){return{className:e,begin:n,relevance:a}},i={begin:"\\(",end:"\\)",contains:s,relevance:0};s.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,t("'"),t('"'),e.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},r("number","#[0-9A-Fa-f]+\\b"),i,r("variable","@@?[\\w-]+",10),r("variable","@{[\\w-]+}"),r("built_in","~?`[^`]*?`"),{className:"attribute",begin:"[\\w-]+\\s*:",end:":",returnBegin:!0,excludeEnd:!0},{className:"meta",begin:"!important"});var c=s.concat({begin:"{",end:"}",contains:a}),l={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(s)},o={begin:n+"\\s*:",returnBegin:!0,end:"[;}]",relevance:0,contains:[{className:"attribute",begin:n,end:":",excludeEnd:!0,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:s}}]},g={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",returnEnd:!0,contains:s,relevance:0}},d={className:"variable",variants:[{begin:"@[\\w-]+\\s*:",relevance:15},{begin:"@[\\w-]+"}],starts:{end:"[;}]",returnEnd:!0,contains:c}},b={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:n,end:"{"}],returnBegin:!0,returnEnd:!0,illegal:"[<='$\"]",relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,l,r("keyword","all\\b"),r("variable","@{[\\w-]+}"),r("selector-tag",n+"%?",0),r("selector-id","#"+n),r("selector-class","\\."+n,0),r("selector-tag","&",0),{className:"selector-attr",begin:"\\[",end:"\\]"},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"\\(",end:"\\)",contains:c},{begin:"!important"}]};return a.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,g,d,o,b),{name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:a}}}()); +hljs.registerLanguage("lua",function(){"use strict";return function(e){var t={begin:"\\[=*\\[",end:"\\]=*\\]",contains:["self"]},a=[e.COMMENT("--(?!\\[=*\\[)","$"),e.COMMENT("--\\[=*\\[","\\]=*\\]",{contains:[t],relevance:10})];return{name:"Lua",keywords:{$pattern:e.UNDERSCORE_IDENT_RE,literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},contains:a.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[e.inherit(e.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:a}].concat(a)},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"\\[=*\\[",end:"\\]=*\\]",contains:[t],relevance:5}])}}}()); +hljs.registerLanguage("makefile",function(){"use strict";return function(e){var i={className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)",contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin:"",relevance:10,contains:[a,i,t,s,{begin:"\\[",end:"\\]",contains:[{className:"meta",begin:"",contains:[a,s,i,t]}]}]},e.COMMENT("\x3c!--","--\x3e",{relevance:10}),{begin:"<\\!\\[CDATA\\[",end:"\\]\\]>",relevance:10},n,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:")",end:">",keywords:{name:"style"},contains:[c],starts:{end:"",returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:")",end:">",keywords:{name:"script"},contains:[c],starts:{end:"<\/script>",returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:"",contains:[{className:"name",begin:/[^\/><\s]+/,relevance:0},c]}]}}}()); +hljs.registerLanguage("markdown",function(){"use strict";return function(n){const e={begin:"<",end:">",subLanguage:"xml",relevance:0},a={begin:"\\[.+?\\][\\(\\[].*?[\\)\\]]",returnBegin:!0,contains:[{className:"string",begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0,relevance:0},{className:"link",begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}],relevance:10},i={className:"strong",contains:[],variants:[{begin:/_{2}/,end:/_{2}/},{begin:/\*{2}/,end:/\*{2}/}]},s={className:"emphasis",contains:[],variants:[{begin:/\*(?!\*)/,end:/\*/},{begin:/_(?!_)/,end:/_/,relevance:0}]};i.contains.push(s),s.contains.push(i);var c=[e,a];return i.contains=i.contains.concat(c),s.contains=s.contains.concat(c),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:c=c.concat(i,s)},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:c}]}]},e,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},i,s,{className:"quote",begin:"^>\\s+",contains:c,end:"$"},{className:"code",variants:[{begin:"(`{3,})(.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})(.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{begin:"^[-\\*]{3,}",end:"$"},a,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}}}()); +hljs.registerLanguage("nginx",function(){"use strict";return function(e){var n={className:"variable",variants:[{begin:/\$\d+/},{begin:/\$\{/,end:/}/},{begin:"[\\$\\@]"+e.UNDERSCORE_IDENT_RE}]},a={endsWithParent:!0,keywords:{$pattern:"[a-z/_]+",literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},relevance:0,illegal:"=>",contains:[e.HASH_COMMENT_MODE,{className:"string",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/}]},{begin:"([a-z]+):/",end:"\\s",endsWithParent:!0,excludeEnd:!0,contains:[n]},{className:"regexp",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:"\\s\\^",end:"\\s|{|;",returnEnd:!0},{begin:"~\\*?\\s+",end:"\\s|{|;",returnEnd:!0},{begin:"\\*(\\.[a-z\\-]+)+"},{begin:"([a-z\\-]+\\.)+\\*"}]},{className:"number",begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{className:"number",begin:"\\b\\d+[kKmMgGdshdwy]*\\b",relevance:0},n]};return{name:"Nginx config",aliases:["nginxconf"],contains:[e.HASH_COMMENT_MODE,{begin:e.UNDERSCORE_IDENT_RE+"\\s+{",returnBegin:!0,end:"{",contains:[{className:"section",begin:e.UNDERSCORE_IDENT_RE}],relevance:0},{begin:e.UNDERSCORE_IDENT_RE+"\\s",end:";|{",returnBegin:!0,contains:[{className:"attribute",begin:e.UNDERSCORE_IDENT_RE,starts:a}],relevance:0}],illegal:"[^\\s\\}]"}}}()); +hljs.registerLanguage("objectivec",function(){"use strict";return function(e){var n=/[a-zA-Z@][a-zA-Z0-9_]*/,_={$pattern:n,keyword:"@interface @class @protocol @implementation"};return{name:"Objective-C",aliases:["mm","objc","obj-c"],keywords:{$pattern:n,keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},illegal:"/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+_.keyword.split(" ").join("|")+")\\b",end:"({|$)",excludeEnd:!0,keywords:_,contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE,relevance:0}]}}}()); +hljs.registerLanguage("perl",function(){"use strict";return function(e){var n={$pattern:/[\w.]+/,keyword:"getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qq fileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmget sub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedir ioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when"},t={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:n},s={begin:"->{",end:"}"},r={variants:[{begin:/\$\d/},{begin:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{begin:/[\$%@][^\s\w{]/,relevance:0}]},i=[e.BACKSLASH_ESCAPE,t,r],a=[r,e.HASH_COMMENT_MODE,e.COMMENT("^\\=\\w","\\=cut",{endsWithParent:!0}),s,{className:"string",contains:i,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*\\<",end:"\\>",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE]},{begin:"{\\w+}",contains:[],relevance:0},{begin:"-?\\w+\\s*\\=\\>",contains:[],relevance:0}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[e.HASH_COMMENT_MODE,{className:"regexp",begin:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",relevance:10},{className:"regexp",begin:"(m|qr)?/",end:"/[a-z]*",contains:[e.BACKSLASH_ESCAPE],relevance:0}]},{className:"function",beginKeywords:"sub",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return t.contains=a,s.contains=a,{name:"Perl",aliases:["pl","pm"],keywords:n,contains:a}}}()); +hljs.registerLanguage("php",function(){"use strict";return function(e){var r={begin:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},t={className:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?[=]?/},{begin:/\?>/}]},a={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:'b"',end:'"'},{begin:"b'",end:"'"},e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null})]},n={variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]},i={keyword:"__CLASS__ __DIR__ __FILE__ __FUNCTION__ __LINE__ __METHOD__ __NAMESPACE__ __TRAIT__ die echo exit include include_once print require require_once array abstract and as binary bool boolean break callable case catch class clone const continue declare default do double else elseif empty enddeclare endfor endforeach endif endswitch endwhile eval extends final finally float for foreach from global goto if implements instanceof insteadof int integer interface isset iterable list new object or private protected public real return string switch throw trait try unset use var void while xor yield",literal:"false null true",built_in:"Error|0 AppendIterator ArgumentCountError ArithmeticError ArrayIterator ArrayObject AssertionError BadFunctionCallException BadMethodCallException CachingIterator CallbackFilterIterator CompileError Countable DirectoryIterator DivisionByZeroError DomainException EmptyIterator ErrorException Exception FilesystemIterator FilterIterator GlobIterator InfiniteIterator InvalidArgumentException IteratorIterator LengthException LimitIterator LogicException MultipleIterator NoRewindIterator OutOfBoundsException OutOfRangeException OuterIterator OverflowException ParentIterator ParseError RangeException RecursiveArrayIterator RecursiveCachingIterator RecursiveCallbackFilterIterator RecursiveDirectoryIterator RecursiveFilterIterator RecursiveIterator RecursiveIteratorIterator RecursiveRegexIterator RecursiveTreeIterator RegexIterator RuntimeException SeekableIterator SplDoublyLinkedList SplFileInfo SplFileObject SplFixedArray SplHeap SplMaxHeap SplMinHeap SplObjectStorage SplObserver SplObserver SplPriorityQueue SplQueue SplStack SplSubject SplSubject SplTempFileObject TypeError UnderflowException UnexpectedValueException ArrayAccess Closure Generator Iterator IteratorAggregate Serializable Throwable Traversable WeakReference Directory __PHP_Incomplete_Class parent php_user_filter self static stdClass"};return{aliases:["php","php3","php4","php5","php6","php7"],case_insensitive:!0,keywords:i,contains:[e.HASH_COMMENT_MODE,e.COMMENT("//","$",{contains:[t]}),e.COMMENT("/\\*","\\*/",{contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.COMMENT("__halt_compiler.+?;",!1,{endsWithParent:!0,keywords:"__halt_compiler"}),{className:"string",begin:/<<<['"]?\w+['"]?$/,end:/^\w+;?$/,contains:[e.BACKSLASH_ESCAPE,{className:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]}]},t,{className:"keyword",begin:/\$this\b/},r,{begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:"function",beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:i,contains:["self",r,e.C_BLOCK_COMMENT_MODE,a,n]}]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:/[:\(\$"]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",end:";",illegal:/[\.']/,contains:[e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"use",end:";",contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"=>"},a,n]}}}()); +hljs.registerLanguage("php-template",function(){"use strict";return function(n){return{name:"PHP template",subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},n.inherit(n.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),n.inherit(n.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]}]}}}()); +hljs.registerLanguage("plaintext",function(){"use strict";return function(t){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}}()); +hljs.registerLanguage("properties",function(){"use strict";return function(e){var n="[ \\t\\f]*",t="("+n+"[:=]"+n+"|[ \\t\\f]+)",a="([^\\\\:= \\t\\f\\n]|\\\\.)+",s={end:t,relevance:0,starts:{className:"string",end:/$/,relevance:0,contains:[{begin:"\\\\\\n"}]}};return{name:".properties",case_insensitive:!0,illegal:/\S/,contains:[e.COMMENT("^\\s*[!#]","$"),{begin:"([^\\\\\\W:= \\t\\f\\n]|\\\\.)+"+t,returnBegin:!0,contains:[{className:"attr",begin:"([^\\\\\\W:= \\t\\f\\n]|\\\\.)+",endsParent:!0,relevance:0}],starts:s},{begin:a+t,returnBegin:!0,relevance:0,contains:[{className:"meta",begin:a,endsParent:!0,relevance:0}],starts:s},{className:"attr",relevance:0,begin:a+n+"$"}]}}}()); +hljs.registerLanguage("python",function(){"use strict";return function(e){var n={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10",built_in:"Ellipsis NotImplemented",literal:"False None True"},a={className:"meta",begin:/^(>>>|\.\.\.) /},i={className:"subst",begin:/\{/,end:/\}/,keywords:n,illegal:/#/},s={begin:/\{\{/,relevance:0},r={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/(u|b)?r?'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/(u|b)?r?"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a],relevance:10},{begin:/(fr|rf|f)'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,a,s,i]},{begin:/(fr|rf|f)"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a,s,i]},{begin:/(u|r|ur)'/,end:/'/,relevance:10},{begin:/(u|r|ur)"/,end:/"/,relevance:10},{begin:/(b|br)'/,end:/'/},{begin:/(b|br)"/,end:/"/},{begin:/(fr|rf|f)'/,end:/'/,contains:[e.BACKSLASH_ESCAPE,s,i]},{begin:/(fr|rf|f)"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,s,i]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},l={className:"number",relevance:0,variants:[{begin:e.BINARY_NUMBER_RE+"[lLjJ]?"},{begin:"\\b(0o[0-7]+)[lLjJ]?"},{begin:e.C_NUMBER_RE+"[lLjJ]?"}]},t={className:"params",variants:[{begin:/\(\s*\)/,skip:!0,className:null},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:["self",a,l,r,e.HASH_COMMENT_MODE]}]};return i.contains=[r,l,a],{name:"Python",aliases:["py","gyp","ipython"],keywords:n,illegal:/(<\/|->|\?)|=>/,contains:[a,l,{beginKeywords:"if",relevance:0},r,e.HASH_COMMENT_MODE,{variants:[{className:"function",beginKeywords:"def"},{className:"class",beginKeywords:"class"}],end:/:/,illegal:/[${=;\n,]/,contains:[e.UNDERSCORE_TITLE_MODE,t,{begin:/->/,endsWithParent:!0,keywords:"None"}]},{className:"meta",begin:/^[\t ]*@/,end:/$/},{begin:/\b(print|exec)\(/}]}}}()); +hljs.registerLanguage("python-repl",function(){"use strict";return function(n){return{aliases:["pycon"],contains:[{className:"meta",starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}}}()); +hljs.registerLanguage("ruby",function(){"use strict";return function(e){var n="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",a={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},s={className:"doctag",begin:"@[A-Za-z]+"},i={begin:"#<",end:">"},r=[e.COMMENT("#","$",{contains:[s]}),e.COMMENT("^\\=begin","^\\=end",{contains:[s],relevance:10}),e.COMMENT("^__END__","\\n$")],c={className:"subst",begin:"#\\{",end:"}",keywords:a},t={className:"string",contains:[e.BACKSLASH_ESCAPE,c],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:"%[qQwWx]?\\(",end:"\\)"},{begin:"%[qQwWx]?\\[",end:"\\]"},{begin:"%[qQwWx]?{",end:"}"},{begin:"%[qQwWx]?<",end:">"},{begin:"%[qQwWx]?/",end:"/"},{begin:"%[qQwWx]?%",end:"%"},{begin:"%[qQwWx]?-",end:"-"},{begin:"%[qQwWx]?\\|",end:"\\|"},{begin:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{begin:/<<[-~]?'?(\w+)(?:.|\n)*?\n\s*\1\b/,returnBegin:!0,contains:[{begin:/<<[-~]?'?/},e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,contains:[e.BACKSLASH_ESCAPE,c]})]}]},b={className:"params",begin:"\\(",end:"\\)",endsParent:!0,keywords:a},d=[t,i,{className:"class",beginKeywords:"class module",end:"$|;",illegal:/=/,contains:[e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{begin:"<\\s*",contains:[{begin:"("+e.IDENT_RE+"::)?"+e.IDENT_RE}]}].concat(r)},{className:"function",beginKeywords:"def",end:"$|;",contains:[e.inherit(e.TITLE_MODE,{begin:n}),b].concat(r)},{begin:e.IDENT_RE+"::"},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(\\!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[t,{begin:n}],relevance:0},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{className:"params",begin:/\|/,end:/\|/,keywords:a},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[i,{className:"regexp",contains:[e.BACKSLASH_ESCAPE,c],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r{",end:"}[a-z]*"},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(r),relevance:0}].concat(r);c.contains=d,b.contains=d;var g=[{begin:/^\s*=>/,starts:{end:"$",contains:d}},{className:"meta",begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>)",starts:{end:"$",contains:d}}];return{name:"Ruby",aliases:["rb","gemspec","podspec","thor","irb"],keywords:a,illegal:/\/\*/,contains:r.concat(g).concat(d)}}}()); +hljs.registerLanguage("rust",function(){"use strict";return function(e){var n="([ui](8|16|32|64|128|size)|f(32|64))?",t="drop i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize f32 f64 str char bool Box Option Result String Vec Copy Send Sized Sync Drop Fn FnMut FnOnce ToOwned Clone Debug PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator SliceConcatExt ToString assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!";return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?",keyword:"abstract as async await become box break const continue crate do dyn else enum extern false final fn for if impl in let loop macro match mod move mut override priv pub ref return self Self static struct super trait true try type typeof unsafe unsized use virtual where while yield",literal:"true false Some None Ok Err",built_in:t},illegal:""}]}}}()); +hljs.registerLanguage("scss",function(){"use strict";return function(e){var t={className:"variable",begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b"},i={className:"number",begin:"#[0-9A-Fa-f]+"};return e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{name:"SCSS",case_insensitive:!0,illegal:"[=/|']",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:"\\#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},{className:"selector-attr",begin:"\\[",end:"\\]",illegal:"$"},{className:"selector-tag",begin:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",relevance:0},{className:"selector-pseudo",begin:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{className:"selector-pseudo",begin:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},t,{className:"attribute",begin:"\\b(src|z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",illegal:"[^\\s]"},{begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{begin:":",end:";",contains:[t,i,e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{className:"meta",begin:"!important"}]},{begin:"@(page|font-face)",lexemes:"@[a-z-]+",keywords:"@page @font-face"},{begin:"@",end:"[{;]",returnBegin:!0,keywords:"and or not only",contains:[{begin:"@[a-z-]+",className:"keyword"},t,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,i,e.CSS_NUMBER_MODE]}]}}}()); +hljs.registerLanguage("shell",function(){"use strict";return function(s){return{name:"Shell Session",aliases:["console"],contains:[{className:"meta",begin:"^\\s{0,3}[/\\w\\d\\[\\]()@-]*[>%$#]",starts:{end:"$",subLanguage:"bash"}}]}}}()); +hljs.registerLanguage("sql",function(){"use strict";return function(e){var t=e.COMMENT("--","$");return{name:"SQL",case_insensitive:!0,illegal:/[<>{}*]/,contains:[{beginKeywords:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with",end:/;/,endsWithParent:!0,keywords:{$pattern:/[\w\.]+/,keyword:"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null unknown",built_in:"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varchar2 varying void"},contains:[{className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},{className:"string",begin:'"',end:'"',contains:[{begin:'""'}]},{className:"string",begin:"`",end:"`"},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,e.HASH_COMMENT_MODE]},e.C_BLOCK_COMMENT_MODE,t,e.HASH_COMMENT_MODE]}}}()); +hljs.registerLanguage("swift",function(){"use strict";return function(e){var i={keyword:"#available #colorLiteral #column #else #elseif #endif #file #fileLiteral #function #if #imageLiteral #line #selector #sourceLocation _ __COLUMN__ __FILE__ __FUNCTION__ __LINE__ Any as as! as? associatedtype associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c compactMap contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip"},n=e.COMMENT("/\\*","\\*/",{contains:["self"]}),t={className:"subst",begin:/\\\(/,end:"\\)",keywords:i,contains:[]},a={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:/"""/,end:/"""/},{begin:/"/,end:/"/}]},r={className:"number",begin:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",relevance:0};return t.contains=[r],{name:"Swift",keywords:i,contains:[a,e.C_LINE_COMMENT_MODE,n,{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*[!?]"},{className:"type",begin:"\\b[A-Z][\\wÀ-ʸ']*",relevance:0},r,{className:"function",beginKeywords:"func",end:"{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/}),{begin://},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:i,contains:["self",r,a,e.C_BLOCK_COMMENT_MODE,{begin:":"}],illegal:/["']/}],illegal:/\[|%/},{className:"class",beginKeywords:"struct protocol class extension enum",keywords:i,end:"\\{",excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/})]},{className:"meta",begin:"(@discardableResult|@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@objcMembers|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain|@dynamicMemberLookup|@propertyWrapper)\\b"},{beginKeywords:"import",end:/$/,contains:[e.C_LINE_COMMENT_MODE,n]}]}}}()); +hljs.registerLanguage("typescript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);return function(r){var t={$pattern:"[A-Za-z$_][0-9A-Za-z$_]*",keyword:e.concat(["type","namespace","typedef","interface","public","private","protected","implements","declare","abstract","readonly"]).join(" "),literal:n.join(" "),built_in:a.concat(["any","void","number","boolean","string","object","never","enum"]).join(" ")},s={className:"meta",begin:"@[A-Za-z$_][0-9A-Za-z$_]*"},i={className:"number",variants:[{begin:"\\b(0[bB][01]+)n?"},{begin:"\\b(0[oO][0-7]+)n?"},{begin:r.C_NUMBER_RE+"n?"}],relevance:0},o={className:"subst",begin:"\\$\\{",end:"\\}",keywords:t,contains:[]},c={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[r.BACKSLASH_ESCAPE,o],subLanguage:"xml"}},l={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[r.BACKSLASH_ESCAPE,o],subLanguage:"css"}},E={className:"string",begin:"`",end:"`",contains:[r.BACKSLASH_ESCAPE,o]};o.contains=[r.APOS_STRING_MODE,r.QUOTE_STRING_MODE,c,l,E,i,r.REGEXP_MODE];var d={begin:"\\(",end:/\)/,keywords:t,contains:["self",r.QUOTE_STRING_MODE,r.APOS_STRING_MODE,r.NUMBER_MODE]},u={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:[r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,s,d]};return{name:"TypeScript",aliases:["ts"],keywords:t,contains:[r.SHEBANG(),{className:"meta",begin:/^\s*['"]use strict['"]/},r.APOS_STRING_MODE,r.QUOTE_STRING_MODE,c,l,E,r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,i,{begin:"("+r.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[r.C_LINE_COMMENT_MODE,r.C_BLOCK_COMMENT_MODE,r.REGEXP_MODE,{className:"function",begin:"(\\([^(]*(\\([^(]*(\\([^(]*\\))?\\))?\\)|"+r.UNDERSCORE_IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:r.UNDERSCORE_IDENT_RE},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:t,contains:d.contains}]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/[\{;]/,excludeEnd:!0,keywords:t,contains:["self",r.inherit(r.TITLE_MODE,{begin:"[A-Za-z$_][0-9A-Za-z$_]*"}),u],illegal:/%/,relevance:0},{beginKeywords:"constructor",end:/[\{;]/,excludeEnd:!0,contains:["self",u]},{begin:/module\./,keywords:{built_in:"module"},relevance:0},{beginKeywords:"module",end:/\{/,excludeEnd:!0},{beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:"interface extends"},{begin:/\$[(.]/},{begin:"\\."+r.IDENT_RE,relevance:0},s,d]}}}()); +hljs.registerLanguage("yaml",function(){"use strict";return function(e){var n="true false yes no null",a="[\\w#;/?:@&=+$,.~*\\'()[\\]]+",s={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:"{{",end:"}}"},{begin:"%{",end:"}"}]}]},i=e.inherit(s,{variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),l={end:",",endsWithParent:!0,excludeEnd:!0,contains:[],keywords:n,relevance:0},t={begin:"{",end:"}",contains:[l],illegal:"\\n",relevance:0},g={begin:"\\[",end:"\\]",contains:[l],illegal:"\\n",relevance:0},b=[{className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---s*$",relevance:10},{className:"string",begin:"[\\|>]([0-9]?[+-])?[ ]*\\n( *)[\\S ]+\\n(\\2[\\S ]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+a},{className:"type",begin:"!<"+a+">"},{className:"type",begin:"!"+a},{className:"type",begin:"!!"+a},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"\\-(?=[ ]|$)",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{className:"number",begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"},{className:"number",begin:e.C_NUMBER_RE+"\\b"},t,g,s],c=[...b];return c.pop(),c.push(i),l.contains=c,{name:"YAML",case_insensitive:!0,aliases:["yml","YAML"],contains:b}}}()); +hljs.registerLanguage("armasm",function(){"use strict";return function(s){const e={variants:[s.COMMENT("^[ \\t]*(?=#)","$",{relevance:0,excludeBegin:!0}),s.COMMENT("[;@]","$",{relevance:0}),s.C_LINE_COMMENT_MODE,s.C_BLOCK_COMMENT_MODE]};return{name:"ARM Assembly",case_insensitive:!0,aliases:["arm"],keywords:{$pattern:"\\.?"+s.IDENT_RE,meta:".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ",built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 pc lr sp ip sl sb fp a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 {PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @"},contains:[{className:"keyword",begin:"\\b(adc|(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|wfe|wfi|yield)(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?[sptrx]?(?=\\s)"},e,s.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",relevance:0},{className:"title",begin:"\\|",end:"\\|",illegal:"\\n",relevance:0},{className:"number",variants:[{begin:"[#$=]?0x[0-9a-f]+"},{begin:"[#$=]?0b[01]+"},{begin:"[#$=]\\d+"},{begin:"\\b\\d+"}],relevance:0},{className:"symbol",variants:[{begin:"^[ \\t]*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"},{begin:"^[a-z_\\.\\$][a-z0-9_\\.\\$]+"},{begin:"[=#]\\w+"}],relevance:0}]}}}()); +hljs.registerLanguage("d",function(){"use strict";return function(e){var a={$pattern:e.UNDERSCORE_IDENT_RE,keyword:"abstract alias align asm assert auto body break byte case cast catch class const continue debug default delete deprecated do else enum export extern final finally for foreach foreach_reverse|10 goto if immutable import in inout int interface invariant is lazy macro mixin module new nothrow out override package pragma private protected public pure ref return scope shared static struct super switch synchronized template this throw try typedef typeid typeof union unittest version void volatile while with __FILE__ __LINE__ __gshared|10 __thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__",built_in:"bool cdouble cent cfloat char creal dchar delegate double dstring float function idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar wstring",literal:"false null true"},d="((0|[1-9][\\d_]*)|0[bB][01_]+|0[xX]([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))",n="\\\\(['\"\\?\\\\abfnrtv]|u[\\dA-Fa-f]{4}|[0-7]{1,3}|x[\\dA-Fa-f]{2}|U[\\dA-Fa-f]{8})|&[a-zA-Z\\d]{2,};",t={className:"number",begin:"\\b"+d+"(L|u|U|Lu|LU|uL|UL)?",relevance:0},_={className:"number",begin:"\\b(((0[xX](([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)\\.([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)|\\.?([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))[pP][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))|((0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(\\.\\d*|([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)))|\\d+\\.(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)|\\.(0|[1-9][\\d_]*)([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))?))([fF]|L|i|[fF]i|Li)?|"+d+"(i|[fF]i|Li))",relevance:0},r={className:"string",begin:"'("+n+"|.)",end:"'",illegal:"."},i={className:"string",begin:'"',contains:[{begin:n,relevance:0}],end:'"[cwd]?'},s=e.COMMENT("\\/\\+","\\+\\/",{contains:["self"],relevance:10});return{name:"D",keywords:a,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s,{className:"string",begin:'x"[\\da-fA-F\\s\\n\\r]*"[cwd]?',relevance:10},i,{className:"string",begin:'[rq]"',end:'"[cwd]?',relevance:5},{className:"string",begin:"`",end:"`[cwd]?"},{className:"string",begin:'q"\\{',end:'\\}"'},_,t,r,{className:"meta",begin:"^#!",end:"$",relevance:5},{className:"meta",begin:"#(line)",end:"$",relevance:5},{className:"keyword",begin:"@[a-zA-Z_][a-zA-Z_\\d]*"}]}}}()); +hljs.registerLanguage("handlebars",function(){"use strict";function e(...e){return e.map(e=>(function(e){return e?"string"==typeof e?e:e.source:null})(e)).join("")}return function(n){const a={"builtin-name":"action bindattr collection component concat debugger each each-in get hash if in input link-to loc log lookup mut outlet partial query-params render template textarea unbound unless view with yield"},t=/\[.*?\]/,s=/[^\s!"#%&'()*+,.\/;<=>@\[\\\]^`{|}~]+/,i=e("(",/'.*?'/,"|",/".*?"/,"|",t,"|",s,"|",/\.|\//,")+"),r=e("(",t,"|",s,")(?==)"),l={begin:i,lexemes:/[\w.\/]+/},c=n.inherit(l,{keywords:{literal:"true false undefined null"}}),o={begin:/\(/,end:/\)/},m={className:"attr",begin:r,relevance:0,starts:{begin:/=/,end:/=/,starts:{contains:[n.NUMBER_MODE,n.QUOTE_STRING_MODE,n.APOS_STRING_MODE,c,o]}}},d={contains:[n.NUMBER_MODE,n.QUOTE_STRING_MODE,n.APOS_STRING_MODE,{begin:/as\s+\|/,keywords:{keyword:"as"},end:/\|/,contains:[{begin:/\w+/}]},m,c,o],returnEnd:!0},g=n.inherit(l,{className:"name",keywords:a,starts:n.inherit(d,{end:/\)/})});o.contains=[g];const u=n.inherit(l,{keywords:a,className:"name",starts:n.inherit(d,{end:/}}/})}),b=n.inherit(l,{keywords:a,className:"name"}),h=n.inherit(l,{className:"name",keywords:a,starts:n.inherit(d,{end:/}}/})});return{name:"Handlebars",aliases:["hbs","html.hbs","html.handlebars","htmlbars"],case_insensitive:!0,subLanguage:"xml",contains:[{begin:/\\\{\{/,skip:!0},{begin:/\\\\(?=\{\{)/,skip:!0},n.COMMENT(/\{\{!--/,/--\}\}/),n.COMMENT(/\{\{!/,/\}\}/),{className:"template-tag",begin:/\{\{\{\{(?!\/)/,end:/\}\}\}\}/,contains:[u],starts:{end:/\{\{\{\{\//,returnEnd:!0,subLanguage:"xml"}},{className:"template-tag",begin:/\{\{\{\{\//,end:/\}\}\}\}/,contains:[b]},{className:"template-tag",begin:/\{\{#/,end:/\}\}/,contains:[u]},{className:"template-tag",begin:/\{\{(?=else\}\})/,end:/\}\}/,keywords:"else"},{className:"template-tag",begin:/\{\{\//,end:/\}\}/,contains:[b]},{className:"template-variable",begin:/\{\{\{/,end:/\}\}\}/,contains:[h]},{className:"template-variable",begin:/\{\{/,end:/\}\}/,contains:[h]}]}}}()); +hljs.registerLanguage("haskell",function(){"use strict";return function(e){var n={variants:[e.COMMENT("--","$"),e.COMMENT("{-","-}",{contains:["self"]})]},i={className:"meta",begin:"{-#",end:"#-}"},a={className:"meta",begin:"^#",end:"$"},s={className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},l={begin:"\\(",end:"\\)",illegal:'"',contains:[i,a,{className:"type",begin:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},e.inherit(e.TITLE_MODE,{begin:"[_a-z][\\w']*"}),n]};return{name:"Haskell",aliases:["hs"],keywords:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",contains:[{beginKeywords:"module",end:"where",keywords:"module where",contains:[l,n],illegal:"\\W\\.|;"},{begin:"\\bimport\\b",end:"$",keywords:"import qualified as hiding",contains:[l,n],illegal:"\\W\\.|;"},{className:"class",begin:"^(\\s*)?(class|instance)\\b",end:"where",keywords:"class family instance where",contains:[s,l,n]},{className:"class",begin:"\\b(data|(new)?type)\\b",end:"$",keywords:"data family type newtype deriving",contains:[i,s,l,{begin:"{",end:"}",contains:l.contains},n]},{beginKeywords:"default",end:"$",contains:[s,l,n]},{beginKeywords:"infix infixl infixr",end:"$",contains:[e.C_NUMBER_MODE,n]},{begin:"\\bforeign\\b",end:"$",keywords:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",contains:[s,e.QUOTE_STRING_MODE,n]},{className:"meta",begin:"#!\\/usr\\/bin\\/env runhaskell",end:"$"},i,a,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,s,e.inherit(e.TITLE_MODE,{begin:"^[_a-z][\\w']*"}),n,{begin:"->|<-"}]}}}()); +hljs.registerLanguage("julia",function(){"use strict";return function(e){var r="[A-Za-z_\\u00A1-\\uFFFF][A-Za-z_0-9\\u00A1-\\uFFFF]*",t={$pattern:r,keyword:"in isa where baremodule begin break catch ccall const continue do else elseif end export false finally for function global if import importall let local macro module quote return true try using while type immutable abstract bitstype typealias ",literal:"true false ARGS C_NULL DevNull ENDIAN_BOM ENV I Inf Inf16 Inf32 Inf64 InsertionSort JULIA_HOME LOAD_PATH MergeSort NaN NaN16 NaN32 NaN64 PROGRAM_FILE QuickSort RoundDown RoundFromZero RoundNearest RoundNearestTiesAway RoundNearestTiesUp RoundToZero RoundUp STDERR STDIN STDOUT VERSION catalan e|0 eu|0 eulergamma golden im nothing pi γ π φ ",built_in:"ANY AbstractArray AbstractChannel AbstractFloat AbstractMatrix AbstractRNG AbstractSerializer AbstractSet AbstractSparseArray AbstractSparseMatrix AbstractSparseVector AbstractString AbstractUnitRange AbstractVecOrMat AbstractVector Any ArgumentError Array AssertionError Associative Base64DecodePipe Base64EncodePipe Bidiagonal BigFloat BigInt BitArray BitMatrix BitVector Bool BoundsError BufferStream CachingPool CapturedException CartesianIndex CartesianRange Cchar Cdouble Cfloat Channel Char Cint Cintmax_t Clong Clonglong ClusterManager Cmd CodeInfo Colon Complex Complex128 Complex32 Complex64 CompositeException Condition ConjArray ConjMatrix ConjVector Cptrdiff_t Cshort Csize_t Cssize_t Cstring Cuchar Cuint Cuintmax_t Culong Culonglong Cushort Cwchar_t Cwstring DataType Date DateFormat DateTime DenseArray DenseMatrix DenseVecOrMat DenseVector Diagonal Dict DimensionMismatch Dims DirectIndexString Display DivideError DomainError EOFError EachLine Enum Enumerate ErrorException Exception ExponentialBackOff Expr Factorization FileMonitor Float16 Float32 Float64 Function Future GlobalRef GotoNode HTML Hermitian IO IOBuffer IOContext IOStream IPAddr IPv4 IPv6 IndexCartesian IndexLinear IndexStyle InexactError InitError Int Int128 Int16 Int32 Int64 Int8 IntSet Integer InterruptException InvalidStateException Irrational KeyError LabelNode LinSpace LineNumberNode LoadError LowerTriangular MIME Matrix MersenneTwister Method MethodError MethodTable Module NTuple NewvarNode NullException Nullable Number ObjectIdDict OrdinalRange OutOfMemoryError OverflowError Pair ParseError PartialQuickSort PermutedDimsArray Pipe PollingFileWatcher ProcessExitedException Ptr QuoteNode RandomDevice Range RangeIndex Rational RawFD ReadOnlyMemoryError Real ReentrantLock Ref Regex RegexMatch RemoteChannel RemoteException RevString RoundingMode RowVector SSAValue SegmentationFault SerializationState Set SharedArray SharedMatrix SharedVector Signed SimpleVector Slot SlotNumber SparseMatrixCSC SparseVector StackFrame StackOverflowError StackTrace StepRange StepRangeLen StridedArray StridedMatrix StridedVecOrMat StridedVector String SubArray SubString SymTridiagonal Symbol Symmetric SystemError TCPSocket Task Text TextDisplay Timer Tridiagonal Tuple Type TypeError TypeMapEntry TypeMapLevel TypeName TypeVar TypedSlot UDPSocket UInt UInt128 UInt16 UInt32 UInt64 UInt8 UndefRefError UndefVarError UnicodeError UniformScaling Union UnionAll UnitRange Unsigned UpperTriangular Val Vararg VecElement VecOrMat Vector VersionNumber Void WeakKeyDict WeakRef WorkerConfig WorkerPool "},a={keywords:t,illegal:/<\//},n={className:"subst",begin:/\$\(/,end:/\)/,keywords:t},o={className:"variable",begin:"\\$"+r},i={className:"string",contains:[e.BACKSLASH_ESCAPE,n,o],variants:[{begin:/\w*"""/,end:/"""\w*/,relevance:10},{begin:/\w*"/,end:/"\w*/}]},l={className:"string",contains:[e.BACKSLASH_ESCAPE,n,o],begin:"`",end:"`"},s={className:"meta",begin:"@"+r};return a.name="Julia",a.contains=[{className:"number",begin:/(\b0x[\d_]*(\.[\d_]*)?|0x\.\d[\d_]*)p[-+]?\d+|\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\b\d[\d_]*(\.[\d_]*)?|\.\d[\d_]*)([eEfF][-+]?\d+)?/,relevance:0},{className:"string",begin:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},i,l,s,{className:"comment",variants:[{begin:"#=",end:"=#",relevance:10},{begin:"#",end:"$"}]},e.HASH_COMMENT_MODE,{className:"keyword",begin:"\\b(((abstract|primitive)\\s+)type|(mutable\\s+)?struct)\\b"},{begin:/<:/}],n.contains=a.contains,a}}()); +hljs.registerLanguage("nim",function(){"use strict";return function(e){return{name:"Nim",aliases:["nim"],keywords:{keyword:"addr and as asm bind block break case cast const continue converter discard distinct div do elif else end enum except export finally for from func generic if import in include interface is isnot iterator let macro method mixin mod nil not notin object of or out proc ptr raise ref return shl shr static template try tuple type using var when while with without xor yield",literal:"shared guarded stdin stdout stderr result true false",built_in:"int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 float float32 float64 bool char string cstring pointer expr stmt void auto any range array openarray varargs seq set clong culong cchar cschar cshort cint csize clonglong cfloat cdouble clongdouble cuchar cushort cuint culonglong cstringarray semistatic"},contains:[{className:"meta",begin:/{\./,end:/\.}/,relevance:10},{className:"string",begin:/[a-zA-Z]\w*"/,end:/"/,contains:[{begin:/""/}]},{className:"string",begin:/([a-zA-Z]\w*)?"""/,end:/"""/},e.QUOTE_STRING_MODE,{className:"type",begin:/\b[A-Z]\w+\b/,relevance:0},{className:"number",relevance:0,variants:[{begin:/\b(0[xX][0-9a-fA-F][_0-9a-fA-F]*)('?[iIuU](8|16|32|64))?/},{begin:/\b(0o[0-7][_0-7]*)('?[iIuUfF](8|16|32|64))?/},{begin:/\b(0(b|B)[01][_01]*)('?[iIuUfF](8|16|32|64))?/},{begin:/\b(\d[_\d]*)('?[iIuUfF](8|16|32|64))?/}]},e.HASH_COMMENT_MODE]}}}()); +hljs.registerLanguage("r",function(){"use strict";return function(e){var n="([a-zA-Z]|\\.[a-zA-Z.])[a-zA-Z0-9._]*";return{name:"R",contains:[e.HASH_COMMENT_MODE,{begin:n,keywords:{$pattern:n,keyword:"function if in break next repeat else for return switch while try tryCatch stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...",literal:"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10"},relevance:0},{className:"number",begin:"0[xX][0-9a-fA-F]+[Li]?\\b",relevance:0},{className:"number",begin:"\\d+(?:[eE][+\\-]?\\d*)?L\\b",relevance:0},{className:"number",begin:"\\d+\\.(?!\\d)(?:i\\b)?",relevance:0},{className:"number",begin:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{className:"number",begin:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{begin:"`",end:"`",relevance:0},{className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:'"',end:'"'},{begin:"'",end:"'"}]}]}}}()); +hljs.registerLanguage("scala",function(){"use strict";return function(e){var n={className:"subst",variants:[{begin:"\\$[A-Za-z0-9_]+"},{begin:"\\${",end:"}"}]},a={className:"string",variants:[{begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:'"""',end:'"""',relevance:10},{begin:'[a-z]+"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,n]},{className:"string",begin:'[a-z]+"""',end:'"""',contains:[n],relevance:10}]},s={className:"type",begin:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},t={className:"title",begin:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,relevance:0},i={className:"class",beginKeywords:"class object trait type",end:/[:={\[\n;]/,excludeEnd:!0,contains:[{beginKeywords:"extends with",relevance:10},{begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[s]},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[s]},t]},l={className:"function",beginKeywords:"def",end:/[:={\[(\n;]/,excludeEnd:!0,contains:[t]};return{name:"Scala",keywords:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,{className:"symbol",begin:"'\\w[\\w\\d_]*(?!')"},s,l,i,e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"}]}}}()); +hljs.registerLanguage("x86asm",function(){"use strict";return function(s){return{name:"Intel x86 Assembly",case_insensitive:!0,keywords:{$pattern:"[.%]?"+s.IDENT_RE,keyword:"lock rep repe repz repne repnz xaquire xrelease bnd nobnd aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63",built_in:"ip eip rip al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 cs ds es fs gs ss st st0 st1 st2 st3 st4 st5 st6 st7 mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 xmm8 xmm9 xmm10 xmm11 xmm12 xmm13 xmm14 xmm15 xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ymm0 ymm1 ymm2 ymm3 ymm4 ymm5 ymm6 ymm7 ymm8 ymm9 ymm10 ymm11 ymm12 ymm13 ymm14 ymm15 ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 zmm0 zmm1 zmm2 zmm3 zmm4 zmm5 zmm6 zmm7 zmm8 zmm9 zmm10 zmm11 zmm12 zmm13 zmm14 zmm15 zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 k0 k1 k2 k3 k4 k5 k6 k7 bnd0 bnd1 bnd2 bnd3 cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d r0h r1h r2h r3h r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l db dw dd dq dt ddq do dy dz resb resw resd resq rest resdq reso resy resz incbin equ times byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr",meta:"%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif %if %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep %endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment .nolist __FILE__ __LINE__ __SECT__ __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ __UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__ __PASS__ struc endstruc istruc at iend align alignb sectalign daz nodaz up down zero default option assume public bits use16 use32 use64 default section segment absolute extern global common cpu float __utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ __float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ __Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__"},contains:[s.COMMENT(";","$",{relevance:0}),{className:"number",variants:[{begin:"\\b(?:([0-9][0-9_]*)?\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|(0[Xx])?[0-9][0-9_]*\\.?[0-9_]*(?:[pP](?:[+-]?[0-9_]+)?)?)\\b",relevance:0},{begin:"\\$[0-9][0-9A-Fa-f]*",relevance:0},{begin:"\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\b"},{begin:"\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\b"}]},s.QUOTE_STRING_MODE,{className:"string",variants:[{begin:"'",end:"[^\\\\]'"},{begin:"`",end:"[^\\\\]`"}],relevance:0},{className:"symbol",variants:[{begin:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)"},{begin:"^\\s*%%[A-Za-z0-9_$#@~.?]*:"}],relevance:0},{className:"subst",begin:"%[0-9]+",relevance:0},{className:"subst",begin:"%!S+",relevance:0},{className:"meta",begin:/^\s*\.[\w_-]+/}]}}}()); \ No newline at end of file diff --git a/theme/index.hbs b/theme/index.hbs new file mode 100644 index 0000000..2321108 --- /dev/null +++ b/theme/index.hbs @@ -0,0 +1,402 @@ + + + + + + {{ title }} + {{#if is_print }} + + {{/if}} + {{#if base_url}} + + {{/if}} + + + + {{> head}} + + + + + + {{#if favicon_svg}} + + {{/if}} + {{#if favicon_png}} + + {{/if}} + + + + {{#if print_enable}} + + {{/if}} + + + + {{#if copy_fonts}} + + {{/if}} + + + + + + + + {{#each additional_css}} + + {{/each}} + + {{#if mathjax_support}} + + + {{/if}} + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ {{> header}} + + + + {{#if search_enabled}} + + {{/if}} + + + + +
+
+ {{{ content }}} +
+ + +
+
+ + + +
+ + {{#if live_reload_endpoint}} + + + {{/if}} + + {{#if google_analytics}} + + + {{/if}} + + {{#if playground_line_numbers}} + + {{/if}} + + {{#if playground_copyable}} + + {{/if}} + + {{#if playground_js}} + + + + + + {{/if}} + + {{#if search_js}} + + + + {{/if}} + + + + + + + {{#each additional_js}} + + {{/each}} + + {{#if is_print}} + {{#if mathjax_support}} + + {{else}} + + {{/if}} + {{/if}} + +
+ + diff --git a/tools/localization/.eslintrc.js b/tools/localization/.eslintrc.js new file mode 100644 index 0000000..d3dd495 --- /dev/null +++ b/tools/localization/.eslintrc.js @@ -0,0 +1,20 @@ +module.exports = { + env: { + es2021: true, + node: true, + }, + extends: [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "prettier", + ], + parser: "@typescript-eslint/parser", + parserOptions: { + ecmaVersion: "latest", + sourceType: "module", + }, + plugins: ["@typescript-eslint"], + rules: { + "no-useless-escape": 0, + }, +}; diff --git a/tools/localization/.gitignore b/tools/localization/.gitignore new file mode 100644 index 0000000..70fd210 --- /dev/null +++ b/tools/localization/.gitignore @@ -0,0 +1,110 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# Next.js build output +.next + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and *not* Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# ignore downloaded zip file +ankidroiddocs.zip + +# translation extract dir +temp_dir \ No newline at end of file diff --git a/tools/localization/.prettierignore b/tools/localization/.prettierignore new file mode 100644 index 0000000..db4c6d9 --- /dev/null +++ b/tools/localization/.prettierignore @@ -0,0 +1,2 @@ +dist +node_modules \ No newline at end of file diff --git a/tools/localization/.prettierrc b/tools/localization/.prettierrc new file mode 100644 index 0000000..4f93aae --- /dev/null +++ b/tools/localization/.prettierrc @@ -0,0 +1,6 @@ +{ + "trailingComma": "all", + "printWidth": 88, + "tabWidth": 4, + "semi": true +} diff --git a/tools/localization/README.md b/tools/localization/README.md new file mode 100644 index 0000000..006d048 --- /dev/null +++ b/tools/localization/README.md @@ -0,0 +1,69 @@ +# Localization Tool + +This project provides a localization tool built with Yarn, built specifically to interact with the crowdin API via their javascript API client + +Its purpose is to provide a way to upload our English-language localization files to crowdin so that translators may do their work, and then to download that translation work and faithfully copy it into the non-English Android resource locations. + +## Getting Started + +Follow these steps to set up and run the localization tool. + +```bash +# Move to the proper directory +cd ./tools/localization +# Install the javascript dependencies +yarn +# Build the project so it is ready to run +yarn build +``` + +## Commands + +The following commands are available. Run them from the `./tools/localization` directory: + +### Upload + +Uploads English `po/messages.pot` files to Crowdin. + +> yarn start upload + +### Download + +Builds and downloads all translations from Crowdin. + +> yarn start download + +### Extract + +Extracts files from `ankidroiddocs.zip` into an internal staging area + +> yarn start extract + +### Update + +Updates the files from the extracted `ankidroiddocs.zip` file by processing them lightly (adding copyright information, fixing some common errors, etc), then copying them into the correct Android resource folders for the translated languages + +> yarn start update + +## Build / Execution Notes + +The project is implemented in typescript, which must be transpiled into javascript before it may be executed by the node interpreter. + +To transpile the project run: + +> yarn build + +...or alternatively if you are actively developing the project, you may wish to have the code transpiled for testing on any change, this is possible with + +> yarn dev + +...which starts the `tsc` typescript compiler in `--watch` mode + +After building the project, you may use the `package.json` run scripts, or the following commands can also be used if you want to execute the transpiled scripts directly: + +```bash +node .\dist\index.js upload +node .\dist\index.js download +node .\dist\index.js extract +node .\dist\index.js update +``` diff --git a/tools/localization/jest.config.js b/tools/localization/jest.config.js new file mode 100644 index 0000000..319b922 --- /dev/null +++ b/tools/localization/jest.config.js @@ -0,0 +1,5 @@ +/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ +module.exports = { + preset: "ts-jest", + testEnvironment: "node", +}; diff --git a/tools/localization/package-lock.json b/tools/localization/package-lock.json new file mode 100644 index 0000000..d42417a --- /dev/null +++ b/tools/localization/package-lock.json @@ -0,0 +1,6419 @@ +{ + "name": "ankidroid-localization", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ankidroid-localization", + "version": "1.0.0", + "license": "GPL-3.0", + "dependencies": { + "@crowdin/crowdin-api-client": "^1.28.0", + "@types/node": "^20.9.4", + "axios": "^1.6.2", + "dotenv": "^16.3.1", + "extract-zip": "^2.0.1", + "typescript": "^5.3.2" + }, + "devDependencies": { + "@types/jest": "^29.5.10", + "@typescript-eslint/eslint-plugin": "^6.12.0", + "@typescript-eslint/parser": "^6.12.0", + "eslint": "^8.54.0", + "eslint-config-prettier": "^9.0.0", + "eslint-config-standard": "^17.1.0", + "eslint-plugin-import": "^2.29.0", + "eslint-plugin-n": "^16.3.1", + "eslint-plugin-promise": "^6.1.1", + "jest": "^29.7.0", + "prettier": "^3.1.0", + "ts-jest": "^29.1.1", + "ts-node": "^10.9.1" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.4.tgz", + "integrity": "sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz", + "integrity": "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.3.tgz", + "integrity": "sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.3", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.2", + "@babel/parser": "^7.23.3", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.3", + "@babel/types": "^7.23.3", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.4.tgz", + "integrity": "sha512-esuS49Cga3HcThFNebGhlgsrVLkvhqvYDTzgjfFFlHJcIfLe5jFmRRfCQ1KuBfc4Jrtn3ndLgKWAKjBE+IraYQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.4", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.4.tgz", + "integrity": "sha512-HfcMizYz10cr3h29VqyfGL6ZWIjTwWfvYBMsBVGwpcbhNGe3wQ1ZXZRPzZoAHhd9OqHadHqjQ89iVKINXnbzuw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.4", + "@babel/types": "^7.23.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.4.tgz", + "integrity": "sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.4.tgz", + "integrity": "sha512-IYM8wSUwunWTB6tFC2dkKZhxbIjHoWemdK+3f8/wq8aKhbUscxD5MX72ubd90fxvFknaLPeGw5ycU84V1obHJg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.4", + "@babel/generator": "^7.23.4", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.4", + "@babel/types": "^7.23.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.4.tgz", + "integrity": "sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@crowdin/crowdin-api-client": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@crowdin/crowdin-api-client/-/crowdin-api-client-1.28.0.tgz", + "integrity": "sha512-6TCZ8oQBTQAWGCPIfa5Z+4149CeObqSOaGoo4hBTzayq6tZ25BdNElKbYn35VXyrmxaSrHCEJURfIlKLvzWr2g==", + "dependencies": { + "axios": "^1" + }, + "engines": { + "node": ">=12.9.0" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz", + "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz", + "integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.7", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz", + "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", + "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.10", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.10.tgz", + "integrity": "sha512-tE4yxKEphEyxj9s4inideLHktW/x6DwesIwWZ9NN1FKf9zbJYsnhBoA9vrHA/IuIOKwPa5PcFBNV4lpMIOEzyQ==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.9.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.4.tgz", + "integrity": "sha512-wmyg8HUhcn6ACjsn8oKYjkN/zUzQeNtMy44weTJSM6p4MMzEOuKbA3OjJ267uPCOW7Xex9dyrNTful8XTQYoDA==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/semver": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", + "dev": true + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.12.0.tgz", + "integrity": "sha512-XOpZ3IyJUIV1b15M7HVOpgQxPPF7lGXgsfcEIu3yDxFPaf/xZKt7s9QO/pbk7vpWQyVulpJbu4E5LwpZiQo4kA==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.12.0", + "@typescript-eslint/type-utils": "6.12.0", + "@typescript-eslint/utils": "6.12.0", + "@typescript-eslint/visitor-keys": "6.12.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.12.0.tgz", + "integrity": "sha512-s8/jNFPKPNRmXEnNXfuo1gemBdVmpQsK1pcu+QIvuNJuhFzGrpD7WjOcvDc/+uEdfzSYpNu7U/+MmbScjoQ6vg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "6.12.0", + "@typescript-eslint/types": "6.12.0", + "@typescript-eslint/typescript-estree": "6.12.0", + "@typescript-eslint/visitor-keys": "6.12.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.12.0.tgz", + "integrity": "sha512-5gUvjg+XdSj8pcetdL9eXJzQNTl3RD7LgUiYTl8Aabdi8hFkaGSYnaS6BLc0BGNaDH+tVzVwmKtWvu0jLgWVbw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.12.0", + "@typescript-eslint/visitor-keys": "6.12.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.12.0.tgz", + "integrity": "sha512-WWmRXxhm1X8Wlquj+MhsAG4dU/Blvf1xDgGaYCzfvStP2NwPQh6KBvCDbiOEvaE0filhranjIlK/2fSTVwtBng==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "6.12.0", + "@typescript-eslint/utils": "6.12.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.12.0.tgz", + "integrity": "sha512-MA16p/+WxM5JG/F3RTpRIcuOghWO30//VEOvzubM8zuOOBYXsP+IfjoCXXiIfy2Ta8FRh9+IO9QLlaFQUU+10Q==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.12.0.tgz", + "integrity": "sha512-vw9E2P9+3UUWzhgjyyVczLWxZ3GuQNT7QpnIY3o5OMeLO/c8oHljGc8ZpryBMIyympiAAaKgw9e5Hl9dCWFOYw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.12.0", + "@typescript-eslint/visitor-keys": "6.12.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.12.0.tgz", + "integrity": "sha512-LywPm8h3tGEbgfyjYnu3dauZ0U7R60m+miXgKcZS8c7QALO9uWJdvNoP+duKTk2XMWc7/Q3d/QiCuLN9X6SWyQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.12.0", + "@typescript-eslint/types": "6.12.0", + "@typescript-eslint/typescript-estree": "6.12.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.12.0.tgz", + "integrity": "sha512-rg3BizTZHF1k3ipn8gfrzDXXSFKyOEB5zxYXInQ6z0hUvmQlhaZQzK+YmHmNViMA9HzW5Q9+bPPt90bU6GQwyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.12.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", + "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", + "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001564", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001564.tgz", + "integrity": "sha512-DqAOf+rhof+6GVx1y+xzbFPeOumfQnhYzVnZD6LAXijR77yPtm9mfOcqOnT3mpnJiZVT+kwLAFnRlZcIz+c6bg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dedent": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dotenv": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.592", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.592.tgz", + "integrity": "sha512-D3NOkROIlF+d5ixnz7pAf3Lu/AuWpd6AYgI9O67GQXMXTcCP1gJQRotOq35eQy5Sb4hez33XH1YdTtILA7Udww==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.5", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz", + "integrity": "sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.3", + "@eslint/js": "8.54.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-compat-utils": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz", + "integrity": "sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", + "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-config-standard": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", + "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", + "eslint-plugin-promise": "^6.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-es-x": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.4.0.tgz", + "integrity": "sha512-WJa3RhYzBtl8I37ebY9p76s61UhZyi4KaFOnX2A5r32RPazkXj5yoT6PGnD02dhwzEUj0KwsUdqfKDd/OuvGsw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.6.0", + "eslint-compat-utils": "^0.1.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": ">=8" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", + "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-n": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.3.1.tgz", + "integrity": "sha512-w46eDIkxQ2FaTHcey7G40eD+FhTXOdKudDXPUO2n9WNcslze/i/HT2qJ3GXjHngYSGDISIgPNhwGtgoix4zeOw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "builtins": "^5.0.1", + "eslint-plugin-es-x": "^7.1.0", + "get-tsconfig": "^4.7.0", + "ignore": "^5.2.4", + "is-builtin-module": "^3.2.1", + "is-core-module": "^2.12.1", + "minimatch": "^3.1.2", + "resolve": "^1.22.2", + "semver": "^7.5.3" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-promise": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", + "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", + "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz", + "integrity": "sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", + "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "dev": true, + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-jest": { + "version": "29.1.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", + "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "^7.5.3", + "yargs-parser": "^21.0.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.2.tgz", + "integrity": "sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/tools/localization/package.json b/tools/localization/package.json new file mode 100644 index 0000000..d7fe2c9 --- /dev/null +++ b/tools/localization/package.json @@ -0,0 +1,41 @@ +{ + "name": "ankidroid-localization", + "version": "1.0.0", + "description": "Extract localization for AnkiDroid using Crowdin JS client api", + "main": "index.ts", + "private": true, + "scripts": { + "build": "tsc", + "start": "node ./dist/index.js", + "dev": "tsc --watch", + "format": "npx prettier --write .", + "lint": "eslint src/ --ext .js,.jsx,.ts,.tsx --max-warnings=0", + "test": "jest --passWithNoTests" + }, + "repository": "https://github.com/ankidroid/Anki-Android", + "author": "AnkiDroid Open Source Team", + "license": "GPL-3.0", + "dependencies": { + "@crowdin/crowdin-api-client": "^1.28.0", + "@types/node": "^20.9.4", + "axios": "^1.6.2", + "dotenv": "^16.3.1", + "extract-zip": "^2.0.1", + "typescript": "^5.3.2" + }, + "devDependencies": { + "@types/jest": "^29.5.10", + "@typescript-eslint/eslint-plugin": "^6.12.0", + "@typescript-eslint/parser": "^6.12.0", + "eslint": "^8.54.0", + "eslint-config-prettier": "^9.0.0", + "eslint-config-standard": "^17.1.0", + "eslint-plugin-import": "^2.29.0", + "eslint-plugin-n": "^16.3.1", + "eslint-plugin-promise": "^6.1.1", + "jest": "^29.7.0", + "prettier": "^3.1.0", + "ts-jest": "^29.1.1", + "ts-node": "^10.9.1" + } +} diff --git a/tools/localization/src/constants.ts b/tools/localization/src/constants.ts new file mode 100644 index 0000000..7784ae3 --- /dev/null +++ b/tools/localization/src/constants.ts @@ -0,0 +1,30 @@ +/** + * @author + * AnkiDroid Open Source Team + * + * @license + * Copyright (c) AnkiDroid. All rights reserved. + * Licensed under the GPL-3.0 license. See LICENSE file in the project root for details. + */ + +import path from "path"; +import { Credentials } from "@crowdin/crowdin-api-client"; +import { createDirIfNotExisting } from "./update"; + +import dotenv from "dotenv"; +dotenv.config({ path: path.join(__dirname, "../.env") }); + +const CROWDIN_APIv2_PAT = process.env.CROWDIN_APIv2_PAT ?? ""; + +// credentials +export const credentialsConst: Credentials = { + token: CROWDIN_APIv2_PAT, +}; + +export const PROJECT_ID = 645072; +export const TITLE_STR = "AnkiDroid Manual"; +export const poDirectory = path.join(__dirname, "../../../po"); +export const messagesPotFile = path.join(poDirectory, "messages.pot"); + +export const TEMP_DIR = path.join(__dirname, "../temp_dir"); +createDirIfNotExisting(TEMP_DIR); diff --git a/tools/localization/src/download.ts b/tools/localization/src/download.ts new file mode 100644 index 0000000..0f42d08 --- /dev/null +++ b/tools/localization/src/download.ts @@ -0,0 +1,83 @@ +/** + * @author + * AnkiDroid Open Source Team + * + * @license + * Copyright (c) AnkiDroid. All rights reserved. + * Licensed under the GPL-3.0 license. See LICENSE file in the project root for details. + * + * @description + * buildAndDownload() will build zip file on Crowdin server and download it as ankidroiddocs.zip file. + * It's expected to be called through 'yarn start download'. + * + * extractZip() will extract downloaded ankidroiddocs.zip file. + * It's expected to be called through 'yarn start extract'. + */ + +import fs from "fs"; +import axios from "axios"; +import crowdin from "@crowdin/crowdin-api-client"; +import { PROJECT_ID, credentialsConst } from "./constants"; +import extract from "extract-zip"; + +// initialization of crowdin client +const { translationsApi } = new crowdin(credentialsConst); + +/** + * Build ankidroid.zip file on Crowdin server and download it + */ +export async function buildAndDownload() { + try { + // build + console.log("Sending project build request..."); + const buildId = await translationsApi.buildProject(PROJECT_ID); + console.log("Build request sent."); + + // run it for every 10 seconds + const buildProgress = setInterval(async () => { + console.log("Fetching build status..."); + const progress = await translationsApi.checkBuildStatus( + PROJECT_ID, + buildId.data.id, + ); + console.log("Build progress ", progress.data.progress); + + // if project is built, then clear the interval and download the built project files + if (progress.data.progress === 100 && progress.data.status === "finished") { + clearInterval(buildProgress); + console.log("ZIP Built."); + + // download + console.log("Downloading Crowdin file"); + const downloadLink = await translationsApi.downloadTranslations( + PROJECT_ID, + buildId.data.id, + ); + + axios({ + method: "get", + url: downloadLink.data.url, + responseType: "stream", + }).then(function (response) { + response.data.pipe(fs.createWriteStream("ankidroiddocs.zip")); + }); + } + }, 10_000); + } catch (error) { + console.error(error); + } +} + +/** + * Extract the ankidroid.zip file to temp dir + * @param source ankidroid.zip file path + * @param target extract dir path + */ +export async function extractZip(source: string, target: string) { + try { + await extract(source, { dir: target }); + console.log("Extraction complete"); + } catch (err) { + console.log(err); + } +} diff --git a/tools/localization/src/index.ts b/tools/localization/src/index.ts new file mode 100644 index 0000000..e469f47 --- /dev/null +++ b/tools/localization/src/index.ts @@ -0,0 +1,57 @@ +/** + * @author + * AnkiDroid Open Source Team + * + * @license + * Copyright (c) AnkiDroid. All rights reserved. + * Licensed under the GPL-3.0 license. See LICENSE file in the project root for details. + * + * @description + * For calling functions defined in other files. + * upload + * upload English language source files to crowdin + * + * download + * build and download target language files from crowdin + * + * extract + * extract ankidroiddocs.zip to temp_dir + * + * update + * copy latest file from temp_dir to po dir + */ + +import { uploadI18nFiles } from "./upload"; +import { buildAndDownload, extractZip } from "./download"; +import { updateI18nFiles } from "./update"; +import { TEMP_DIR } from "./constants"; + +process.argv.forEach(function (value) { + switch (value) { + case "upload": + console.log("uploading source strings to crowdin..."); + uploadI18nFiles(); + break; + + case "download": + console.log( + "requesting fresh translation build and downloading from crowdin...", + ); + buildAndDownload(); + break; + + case "extract": + console.log( + "extracting downloaded translation bundle to temporary directory...", + ); + extractZip("ankidroiddocs.zip", TEMP_DIR); + break; + + case "update": + console.log( + "Copying downloaded translations to po directory", + ); + updateI18nFiles(); + break; + } +}); diff --git a/tools/localization/src/update.ts b/tools/localization/src/update.ts new file mode 100644 index 0000000..336fbfa --- /dev/null +++ b/tools/localization/src/update.ts @@ -0,0 +1,86 @@ +/** + * @author + * AnkiDroid Open Source Team + * + * @license + * Copyright (c) AnkiDroid. All rights reserved. + * Licensed under the GPL-3.0 license. See LICENSE file in the project root for details. + * + * @description + * updateI18nFiles() to update files in AnkiDroid/src/main/res/values/ with downloaded files from crowdin. + * The downloaded file needs to extract first with 'yarn start extract'. + * It's expected to be called through 'yarn start update'. + */ + +import fs from "fs"; +import { + TEMP_DIR, + poDirectory, +} from "./constants"; + +let anyError = false; + +/** + * Create language resource directory in res/value dir + * + * @param directory name of the directory + */ +export function createDirIfNotExisting(directory: string) { + if (!fs.existsSync(directory)) { + fs.mkdirSync(directory); + } +} + +/** + * For existing po files in po dir for each languages + * + * @param poDirectory po directory + * @param translatedContent content of target language po file + * @param language language code + * @returns boolean + */ +async function update( + poDirectory: string, + translatedContent: string, + language: string, +): Promise { + + fs.writeFileSync( + poDirectory + "/" + language + ".po", + translatedContent, + ); + + return true; +} + +/** + * Update translated I18n files in po/ dir + */ +export async function updateI18nFiles() { + const tempDir = fs.readdirSync(TEMP_DIR); + + for (const language of tempDir) { + + console.log(`\nCopying language files from temp_dir/${language}/messages-${language}.po to po/${language}.po`); + + const file = `messages-${language}.po`; + + const translatedContent = fs.readFileSync( + `${TEMP_DIR}/${language}/${file}`, + "utf-8", + ); + + anyError = !(await update( + poDirectory, + translatedContent, + language, + )); + + if (anyError) { + console.error( + "At least one file of the last handled language contains an error.", + ); + anyError = true; + } + } +} diff --git a/tools/localization/src/upload.ts b/tools/localization/src/upload.ts new file mode 100644 index 0000000..bd9576d --- /dev/null +++ b/tools/localization/src/upload.ts @@ -0,0 +1,93 @@ +/** + * @author + * AnkiDroid Open Source Team + * + * @license + * Copyright (c) AnkiDroid. All rights reserved. + * Licensed under the GPL-3.0 license. See LICENSE file in the project root for details. + * + * @description + * uploadI18nFiles() to upload current version of English strings from po/messages.pot to crowdin. + * It's expected to be called through yarn start upload + */ + +import fs from "fs"; +import crowdin, { ResponseList, SourceFilesModel } from "@crowdin/crowdin-api-client"; +import { + PROJECT_ID, + credentialsConst, + messagesPotFile, +} from "./constants"; + +// initialization of crowdin client +const { uploadStorageApi, sourceFilesApi } = new crowdin(credentialsConst); + +/** + * Upload English source files to Crowdin + */ +export async function uploadI18nFiles() { + const files = await sourceFilesApi.listProjectFiles(PROJECT_ID); + + try { + // upload messages.pot file + const messagesPot = fs.readFileSync(messagesPotFile, "utf8"); + const messagesPotId = idOfFileOrNull("messages.pot", files); + if (messagesPotId) { + console.log("Updating messages.pot"); + await updateFile(messagesPotId, "messages.pot", messagesPot); + } else { + console.log("Creating messages.pot"); + await createFile("messages.pot", messagesPot); + } + } catch (error) { + console.error(error); + } +} + +/** + * Allow to upload a new file for the first time on crowdin + * + * @param fileName name of the file + * @param fileContent file conten + */ +async function createFile(fileName: string, fileContent: string) { + const storage = await uploadStorageApi.addStorage(fileName, fileContent); + const file = await sourceFilesApi.createFile(PROJECT_ID, { + name: fileName, + title: fileName, + storageId: storage.data.id, + type: "auto", + }); + console.log(file, storage.data.id); +} + +/** + * Update file with txt, xml content to translate + * + * @param id storage id (on Crowdin) for the file + * @param fileName name of the file + * @param fileContent file contents + */ +async function updateFile(id: number, fileName: string, fileContent: string) { + const storage = await uploadStorageApi.addStorage(fileName, fileContent); + const file = await sourceFilesApi.updateOrRestoreFile(PROJECT_ID, id, { + storageId: storage.data.id, + }); + console.log(file, storage.data.id); +} + +/** + * check if file exists on crowdin, if exist then return id + * + * @param fileName name of the file + * @param files list of files for current project on Crowdin with ids, names ... + * @returns id if filename stored on Crowdin else null + */ +function idOfFileOrNull(fileName: string, files: ResponseList) { + for (const file of files.data) { + if (file.data.name === fileName) { + return file.data.id; + } + } + return null; +} diff --git a/tools/localization/tsconfig.json b/tools/localization/tsconfig.json new file mode 100644 index 0000000..e48ebc3 --- /dev/null +++ b/tools/localization/tsconfig.json @@ -0,0 +1,105 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, + "lib": [ + "es2019" + ] /* Specify a set of bundled library declaration files that describe the target runtime environment. */, + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs" /* Specify what module code is generated. */, + "rootDir": "src" /* Specify the root folder within your source files. */, + // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + "outDir": "./dist" /* Specify an output folder for all emitted files. */, + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, + + /* Type Checking */ + "strict": true /* Enable all strict type-checking options. */, + "noImplicitAny": true /* Enable error reporting for expressions and declarations with an implied 'any' type. */, + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +} diff --git a/tools/localization/yarn.lock b/tools/localization/yarn.lock new file mode 100644 index 0000000..3e7ba85 --- /dev/null +++ b/tools/localization/yarn.lock @@ -0,0 +1,3728 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + +"@ampproject/remapping@^2.2.0": + version "2.2.1" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.4": + version "7.23.4" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.4.tgz" + integrity sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA== + dependencies: + "@babel/highlight" "^7.23.4" + chalk "^2.4.2" + +"@babel/compat-data@^7.22.9": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz" + integrity sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.23.3.tgz" + integrity sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.22.13" + "@babel/generator" "^7.23.3" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.2" + "@babel/parser" "^7.23.3" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.3" + "@babel/types" "^7.23.3" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.23.3", "@babel/generator@^7.23.4", "@babel/generator@^7.7.2": + version "7.23.4" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.23.4.tgz" + integrity sha512-esuS49Cga3HcThFNebGhlgsrVLkvhqvYDTzgjfFFlHJcIfLe5jFmRRfCQ1KuBfc4Jrtn3ndLgKWAKjBE+IraYQ== + dependencies: + "@babel/types" "^7.23.4" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/helper-compilation-targets@^7.22.15": + version "7.22.15" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz" + integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== + dependencies: + "@babel/compat-data" "^7.22.9" + "@babel/helper-validator-option" "^7.22.15" + browserslist "^4.21.9" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== + +"@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== + dependencies: + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" + +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-module-imports@^7.22.15": + version "7.22.15" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz" + integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== + dependencies: + "@babel/types" "^7.22.15" + +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== + +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + +"@babel/helper-validator-option@^7.22.15": + version "7.22.15" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz" + integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== + +"@babel/helpers@^7.23.2": + version "7.23.4" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.4.tgz" + integrity sha512-HfcMizYz10cr3h29VqyfGL6ZWIjTwWfvYBMsBVGwpcbhNGe3wQ1ZXZRPzZoAHhd9OqHadHqjQ89iVKINXnbzuw== + dependencies: + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.4" + "@babel/types" "^7.23.4" + +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.3", "@babel/parser@^7.23.4": + version "7.23.4" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.23.4.tgz" + integrity sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz" + integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz" + integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/template@^7.22.15", "@babel/template@^7.3.3": + version "7.22.15" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz" + integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" + +"@babel/traverse@^7.23.3", "@babel/traverse@^7.23.4": + version "7.23.4" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.4.tgz" + integrity sha512-IYM8wSUwunWTB6tFC2dkKZhxbIjHoWemdK+3f8/wq8aKhbUscxD5MX72ubd90fxvFknaLPeGw5ycU84V1obHJg== + dependencies: + "@babel/code-frame" "^7.23.4" + "@babel/generator" "^7.23.4" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.23.4" + "@babel/types" "^7.23.4" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.3", "@babel/types@^7.23.4", "@babel/types@^7.3.3": + version "7.23.4" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.23.4.tgz" + integrity sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ== + dependencies: + "@babel/helper-string-parser" "^7.23.4" + "@babel/helper-validator-identifier" "^7.22.20" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@crowdin/crowdin-api-client@^1.28.0": + version "1.28.0" + resolved "https://registry.npmjs.org/@crowdin/crowdin-api-client/-/crowdin-api-client-1.28.0.tgz" + integrity sha512-6TCZ8oQBTQAWGCPIfa5Z+4149CeObqSOaGoo4hBTzayq6tZ25BdNElKbYn35VXyrmxaSrHCEJURfIlKLvzWr2g== + dependencies: + axios "^1" + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@eslint-community/eslint-utils@^4.1.2", "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.4.0" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.0", "@eslint-community/regexpp@^4.6.1": + version "4.10.0" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== + +"@eslint/eslintrc@^2.1.3": + version "2.1.3" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz" + integrity sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.54.0": + version "8.54.0" + resolved "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz" + integrity sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ== + +"@humanwhocodes/config-array@^0.11.13": + version "0.11.13" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz" + integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== + dependencies: + "@humanwhocodes/object-schema" "^2.0.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.1": + version "2.0.1" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz" + integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== + dependencies: + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== + dependencies: + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== + dependencies: + jest-get-type "^29.6.3" + +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + dependencies: + expect "^29.7.0" + jest-snapshot "^29.7.0" + +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== + dependencies: + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" + "@types/node" "*" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" + +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^6.0.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.18" + callsites "^3.0.0" + graceful-fs "^4.2.9" + +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== + dependencies: + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== + dependencies: + "@jest/test-result" "^29.7.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + slash "^3.0.0" + +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.2" + +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + dependencies: + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": + version "3.1.1" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.20" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz" + integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sinonjs/commons@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz" + integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== + dependencies: + "@sinonjs/commons" "^3.0.0" + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + +"@types/babel__core@^7.1.14": + version "7.20.5" + resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.7" + resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz" + integrity sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.4" + resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz" + integrity sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA== + dependencies: + "@babel/types" "^7.20.7" + +"@types/graceful-fs@^4.1.3": + version "4.1.9" + resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.6" + resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== + +"@types/istanbul-lib-report@*": + version "3.0.3" + resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.4" + resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@^29.5.10": + version "29.5.10" + resolved "https://registry.npmjs.org/@types/jest/-/jest-29.5.10.tgz" + integrity sha512-tE4yxKEphEyxj9s4inideLHktW/x6DwesIwWZ9NN1FKf9zbJYsnhBoA9vrHA/IuIOKwPa5PcFBNV4lpMIOEzyQ== + dependencies: + expect "^29.0.0" + pretty-format "^29.0.0" + +"@types/json-schema@^7.0.12": + version "7.0.15" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/node@*", "@types/node@^20.9.4": + version "20.9.4" + resolved "https://registry.npmjs.org/@types/node/-/node-20.9.4.tgz" + integrity sha512-wmyg8HUhcn6ACjsn8oKYjkN/zUzQeNtMy44weTJSM6p4MMzEOuKbA3OjJ267uPCOW7Xex9dyrNTful8XTQYoDA== + dependencies: + undici-types "~5.26.4" + +"@types/semver@^7.5.0": + version "7.5.6" + resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz" + integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== + +"@types/stack-utils@^2.0.0": + version "2.0.3" + resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== + +"@types/yargs-parser@*": + version "21.0.3" + resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== + +"@types/yargs@^17.0.8": + version "17.0.32" + resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz" + integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== + dependencies: + "@types/yargs-parser" "*" + +"@types/yauzl@^2.9.1": + version "2.10.3" + resolved "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz" + integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== + dependencies: + "@types/node" "*" + +"@typescript-eslint/eslint-plugin@^6.12.0": + version "6.12.0" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.12.0.tgz" + integrity sha512-XOpZ3IyJUIV1b15M7HVOpgQxPPF7lGXgsfcEIu3yDxFPaf/xZKt7s9QO/pbk7vpWQyVulpJbu4E5LwpZiQo4kA== + dependencies: + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.12.0" + "@typescript-eslint/type-utils" "6.12.0" + "@typescript-eslint/utils" "6.12.0" + "@typescript-eslint/visitor-keys" "6.12.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.4" + natural-compare "^1.4.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/parser@^6.12.0": + version "6.12.0" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.12.0.tgz" + integrity sha512-s8/jNFPKPNRmXEnNXfuo1gemBdVmpQsK1pcu+QIvuNJuhFzGrpD7WjOcvDc/+uEdfzSYpNu7U/+MmbScjoQ6vg== + dependencies: + "@typescript-eslint/scope-manager" "6.12.0" + "@typescript-eslint/types" "6.12.0" + "@typescript-eslint/typescript-estree" "6.12.0" + "@typescript-eslint/visitor-keys" "6.12.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@6.12.0": + version "6.12.0" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.12.0.tgz" + integrity sha512-5gUvjg+XdSj8pcetdL9eXJzQNTl3RD7LgUiYTl8Aabdi8hFkaGSYnaS6BLc0BGNaDH+tVzVwmKtWvu0jLgWVbw== + dependencies: + "@typescript-eslint/types" "6.12.0" + "@typescript-eslint/visitor-keys" "6.12.0" + +"@typescript-eslint/type-utils@6.12.0": + version "6.12.0" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.12.0.tgz" + integrity sha512-WWmRXxhm1X8Wlquj+MhsAG4dU/Blvf1xDgGaYCzfvStP2NwPQh6KBvCDbiOEvaE0filhranjIlK/2fSTVwtBng== + dependencies: + "@typescript-eslint/typescript-estree" "6.12.0" + "@typescript-eslint/utils" "6.12.0" + debug "^4.3.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/types@6.12.0": + version "6.12.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.12.0.tgz" + integrity sha512-MA16p/+WxM5JG/F3RTpRIcuOghWO30//VEOvzubM8zuOOBYXsP+IfjoCXXiIfy2Ta8FRh9+IO9QLlaFQUU+10Q== + +"@typescript-eslint/typescript-estree@6.12.0": + version "6.12.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.12.0.tgz" + integrity sha512-vw9E2P9+3UUWzhgjyyVczLWxZ3GuQNT7QpnIY3o5OMeLO/c8oHljGc8ZpryBMIyympiAAaKgw9e5Hl9dCWFOYw== + dependencies: + "@typescript-eslint/types" "6.12.0" + "@typescript-eslint/visitor-keys" "6.12.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/utils@6.12.0": + version "6.12.0" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.12.0.tgz" + integrity sha512-LywPm8h3tGEbgfyjYnu3dauZ0U7R60m+miXgKcZS8c7QALO9uWJdvNoP+duKTk2XMWc7/Q3d/QiCuLN9X6SWyQ== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.12.0" + "@typescript-eslint/types" "6.12.0" + "@typescript-eslint/typescript-estree" "6.12.0" + semver "^7.5.4" + +"@typescript-eslint/visitor-keys@6.12.0": + version "6.12.0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.12.0.tgz" + integrity sha512-rg3BizTZHF1k3ipn8gfrzDXXSFKyOEB5zxYXInQ6z0hUvmQlhaZQzK+YmHmNViMA9HzW5Q9+bPPt90bU6GQwyw== + dependencies: + "@typescript-eslint/types" "6.12.0" + eslint-visitor-keys "^3.4.1" + +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^8.1.1: + version "8.3.0" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz" + integrity sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA== + +acorn@^8.4.1, acorn@^8.9.0: + version "8.11.2" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz" + integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== + +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +anymatch@^3.0.3: + version "3.1.3" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + +array-includes@^3.1.7: + version "3.1.7" + resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz" + integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.findlastindex@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz" + integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.2.1" + +array.prototype.flat@^1.3.2: + version "1.3.2" + resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +arraybuffer.prototype.slice@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz" + integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +axios@^1, axios@^1.6.2: + version "1.6.2" + resolved "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz" + integrity sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== + dependencies: + "@jest/transform" "^29.7.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.6.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== + dependencies: + babel-plugin-jest-hoist "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.21.9: + version "4.22.1" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz" + integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== + dependencies: + caniuse-lite "^1.0.30001541" + electron-to-chromium "^1.4.535" + node-releases "^2.0.13" + update-browserslist-db "^1.0.13" + +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +builtin-modules@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + +builtins@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz" + integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + dependencies: + semver "^7.0.0" + +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== + dependencies: + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001541: + version "1.0.30001564" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001564.tgz" + integrity sha512-DqAOf+rhof+6GVx1y+xzbFPeOumfQnhYzVnZD6LAXijR77yPtm9mfOcqOnT3mpnJiZVT+kwLAFnRlZcIz+c6bg== + +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +ci-info@^3.2.0: + version "3.9.0" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== + +cjs-module-lexer@^1.0.0: + version "1.2.3" + resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz" + integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +collect-v8-coverage@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz" + integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +dedent@^1.0.0: + version "1.5.1" + resolved "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz" + integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: + version "1.2.1" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dotenv@^16.3.1: + version "16.3.1" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz" + integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== + +electron-to-chromium@^1.4.535: + version "1.4.592" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.592.tgz" + integrity sha512-D3NOkROIlF+d5ixnz7pAf3Lu/AuWpd6AYgI9O67GQXMXTcCP1gJQRotOq35eQy5Sb4hez33XH1YdTtILA7Udww== + +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.22.1: + version "1.22.3" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== + dependencies: + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.2" + available-typed-arrays "^1.0.5" + call-bind "^1.0.5" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.2" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.12" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.1" + safe-array-concat "^1.0.1" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.13" + +es-set-tostringtag@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== + dependencies: + get-intrinsic "^1.2.2" + has-tostringtag "^1.0.0" + hasown "^2.0.0" + +es-shim-unscopables@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-compat-utils@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz" + integrity sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg== + +eslint-config-prettier@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz" + integrity sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw== + +eslint-config-standard@^17.1.0: + version "17.1.0" + resolved "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz" + integrity sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q== + +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-module-utils@^2.8.0: + version "2.8.0" + resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== + dependencies: + debug "^3.2.7" + +eslint-plugin-es-x@^7.1.0: + version "7.4.0" + resolved "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.4.0.tgz" + integrity sha512-WJa3RhYzBtl8I37ebY9p76s61UhZyi4KaFOnX2A5r32RPazkXj5yoT6PGnD02dhwzEUj0KwsUdqfKDd/OuvGsw== + dependencies: + "@eslint-community/eslint-utils" "^4.1.2" + "@eslint-community/regexpp" "^4.6.0" + eslint-compat-utils "^0.1.2" + +eslint-plugin-import@^2.29.0: + version "2.29.0" + resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz" + integrity sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg== + dependencies: + array-includes "^3.1.7" + array.prototype.findlastindex "^1.2.3" + array.prototype.flat "^1.3.2" + array.prototype.flatmap "^1.3.2" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.8.0" + hasown "^2.0.0" + is-core-module "^2.13.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.7" + object.groupby "^1.0.1" + object.values "^1.1.7" + semver "^6.3.1" + tsconfig-paths "^3.14.2" + +eslint-plugin-n@^16.3.1: + version "16.3.1" + resolved "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.3.1.tgz" + integrity sha512-w46eDIkxQ2FaTHcey7G40eD+FhTXOdKudDXPUO2n9WNcslze/i/HT2qJ3GXjHngYSGDISIgPNhwGtgoix4zeOw== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + builtins "^5.0.1" + eslint-plugin-es-x "^7.1.0" + get-tsconfig "^4.7.0" + ignore "^5.2.4" + is-builtin-module "^3.2.1" + is-core-module "^2.12.1" + minimatch "^3.1.2" + resolve "^1.22.2" + semver "^7.5.3" + +eslint-plugin-promise@^6.1.1: + version "6.1.1" + resolved "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz" + integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== + +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@^8.54.0: + version "8.54.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz" + integrity sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.3" + "@eslint/js" "8.54.0" + "@humanwhocodes/config-array" "^0.11.13" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expect@^29.0.0, expect@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== + dependencies: + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + +extract-zip@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.9: + version "3.3.2" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +fb-watchman@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flatted@^3.2.9: + version "3.2.9" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz" + integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== + +follow-redirects@^1.15.0: + version "1.15.3" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz" + integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== + dependencies: + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +get-tsconfig@^4.7.0: + version "4.7.2" + resolved "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz" + integrity sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A== + dependencies: + resolve-pkg-maps "^1.0.0" + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^7.1.3, glob@^7.1.4: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.19.0: + version "13.23.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz" + integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== + dependencies: + get-intrinsic "^1.2.2" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + dependencies: + function-bind "^1.1.2" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +ignore@^5.2.0, ignore@^5.2.4: + version "5.3.0" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz" + integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== + +import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +internal-slot@^1.0.5: + version "1.0.6" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== + dependencies: + get-intrinsic "^1.2.2" + hasown "^2.0.0" + side-channel "^1.0.4" + +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-builtin-module@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz" + integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== + dependencies: + builtin-modules "^3.3.0" + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.12.1, is-core-module@^2.13.0, is-core-module@^2.13.1: + version "2.13.1" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: + version "1.1.12" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== + dependencies: + which-typed-array "^1.1.11" + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.2" + resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + +istanbul-lib-instrument@^5.0.4: + version "5.2.1" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-instrument@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz" + integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + +istanbul-lib-report@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.6" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz" + integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== + dependencies: + execa "^5.0.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^1.0.0" + is-generator-fn "^2.0.0" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + pretty-format "^29.7.0" + pure-rand "^6.0.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== + dependencies: + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + chalk "^4.0.0" + create-jest "^29.7.0" + exit "^0.1.2" + import-local "^3.0.2" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + yargs "^17.3.1" + +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== + dependencies: + detect-newline "^3.0.0" + +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== + +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== + dependencies: + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== + dependencies: + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== + dependencies: + chalk "^4.0.0" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.6.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-util "^29.7.0" + +jest-pnp-resolver@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== + +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== + dependencies: + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" + +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-pnp-resolver "^1.2.2" + jest-util "^29.7.0" + jest-validate "^29.7.0" + resolve "^1.20.0" + resolve.exports "^2.0.0" + slash "^3.0.0" + +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== + dependencies: + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.13.1" + graceful-fs "^4.2.9" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^29.7.0" + graceful-fs "^4.2.9" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + natural-compare "^1.4.0" + pretty-format "^29.7.0" + semver "^7.5.3" + +jest-util@^29.0.0, jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== + dependencies: + "@jest/types" "^29.6.3" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^29.6.3" + leven "^3.1.0" + pretty-format "^29.7.0" + +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== + dependencies: + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.13.1" + jest-util "^29.7.0" + string-length "^4.0.1" + +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== + dependencies: + "@types/node" "*" + jest-util "^29.7.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== + dependencies: + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" + import-local "^3.0.2" + jest-cli "^29.7.0" + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +json5@^2.2.3: + version "2.2.3" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.memoize@4.x: + version "4.1.2" + resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + +make-error@1.x, make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +ms@2.1.2, ms@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-releases@^2.0.13: + version "2.0.13" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz" + integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +object-inspect@^1.13.1, object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.fromentries@^2.0.7: + version "2.0.7" + resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz" + integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +object.groupby@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz" + integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + +object.values@^1.1.7: + version "1.1.7" + resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz" + integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2, p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pirates@^4.0.4: + version "4.0.6" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz" + integrity sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw== + +pretty-format@^29.0.0, pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +pure-rand@^6.0.0: + version "6.0.4" + resolved "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz" + integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +regexp.prototype.flags@^1.5.1: + version "1.5.1" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz" + integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + set-function-name "^2.0.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + +resolve.exports@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== + +resolve@^1.20.0, resolve@^1.22.2, resolve@^1.22.4: + version "1.22.8" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-array-concat@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz" + integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + isarray "^2.0.5" + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.0.0, semver@^7.5.3, semver@^7.5.4: + version "7.5.4" + resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +set-function-name@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz" + integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + dependencies: + define-data-property "^1.0.1" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stack-utils@^2.0.3: + version "2.0.6" + resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== + dependencies: + escape-string-regexp "^2.0.0" + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +ts-api-utils@^1.0.1: + version "1.0.3" + resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz" + integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== + +ts-jest@^29.1.1: + version "29.1.1" + resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz" + integrity sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA== + dependencies: + bs-logger "0.x" + fast-json-stable-stringify "2.x" + jest-util "^29.0.0" + json5 "^2.2.3" + lodash.memoize "4.x" + make-error "1.x" + semver "^7.5.3" + yargs-parser "^21.0.1" + +ts-node@^10.9.1: + version "10.9.1" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tsconfig-paths@^3.14.2: + version "3.14.2" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz" + integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + +typescript@^5.3.2: + version "5.3.2" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.3.2.tgz" + integrity sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +v8-to-istanbul@^9.0.1: + version "9.2.0" + resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz" + integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^2.0.0" + +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-typed-array@^1.1.11, which-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.4" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^21.0.1, yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.3.1: + version "17.7.2" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==