├── .all-contributorsrc ├── .deepsource.toml ├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── pull_request_template.md └── workflows │ ├── ci.yml │ ├── lint.yml │ └── release.yml ├── .gitignore ├── .pre-commit-config.yaml ├── .vscode ├── settings.json └── tasks.json ├── .yamllint.yaml ├── CONTRIBUTORS.md ├── LICENSE ├── README.md ├── __builtins__.pyi ├── common.py ├── container.py ├── conversion ├── input_config.py ├── input_init.py ├── kepub_input.py ├── kepub_output.py ├── output_config.py └── output_init.py ├── conversion_in_init.py ├── conversion_out_init.py ├── css ├── hyphenation.css.tmpl ├── no-hyphens.css └── style-hacks.css ├── device ├── __init__.py ├── driver.py └── koboextended_config.py ├── device_init.py ├── md_reader_init.py ├── md_writer_init.py ├── metadata ├── __init__.py ├── reader.py └── writer.py ├── pyproject.toml ├── requirements.txt ├── scripts ├── build.sh └── update-calibre.py ├── test_init.py ├── tests ├── __init__.py ├── assertions.py ├── reference_book │ ├── META-INF │ │ └── container.xml │ ├── OEBPS │ │ ├── part 002.xhtml │ │ ├── part001.xhtml │ │ └── part_(003).xhtml │ ├── content.opf │ ├── cover.jpg │ └── toc.ncx ├── test_common.py ├── test_container.py ├── test_device.py └── test_files │ ├── page_dirty_markup.html │ ├── page_github_106.html │ ├── page_github_136.html │ ├── page_github_90.html │ ├── page_needs_cleanup.html │ ├── page_with_kobo_spans.html │ ├── page_without_spans.html │ ├── page_without_spans_with_comments.html │ ├── test.css │ └── test.js └── translations ├── de.po ├── en.po ├── en_CA.po ├── en_US.po ├── es.po ├── fr.po ├── it.po ├── messages.pot ├── nl.po ├── pt.po └── pt_BR.po /.all-contributorsrc: -------------------------------------------------------------------------------- 1 | { 2 | "contributorsSortAlphabetically": true, 3 | "files": [ 4 | "CONTRIBUTORS.md", 5 | "README.md" 6 | ], 7 | "projectName": "calibre-kobo-driver", 8 | "projectOwner": "jgoguen", 9 | "repoType": "github", 10 | "repoHost": "https://github.com", 11 | "skipCi": true, 12 | "contributors": [ 13 | { 14 | "login": "hub2git", 15 | "name": "hub2git", 16 | "avatar_url": "https://avatars3.githubusercontent.com/u/7141051?v=4", 17 | "profile": "https://github.com/hub2git", 18 | "contributions": [ 19 | "doc" 20 | ] 21 | }, 22 | { 23 | "login": "dchawisher", 24 | "name": "dchawisher", 25 | "avatar_url": "https://avatars0.githubusercontent.com/u/22660616?v=4", 26 | "profile": "https://github.com/dchawisher", 27 | "contributions": [ 28 | "bug" 29 | ] 30 | }, 31 | { 32 | "login": "Byte6d65", 33 | "name": "Byte6d65", 34 | "avatar_url": "https://avatars3.githubusercontent.com/u/66903648?v=4", 35 | "profile": "https://github.com/Byte6d65", 36 | "contributions": [ 37 | "bug" 38 | ] 39 | }, 40 | { 41 | "login": "NiLuJe", 42 | "name": "NiLuJe", 43 | "avatar_url": "https://avatars3.githubusercontent.com/u/111974?v=4", 44 | "profile": "https://github.com/NiLuJe", 45 | "contributions": [ 46 | "code" 47 | ] 48 | }, 49 | { 50 | "login": "davidfor", 51 | "name": "David", 52 | "avatar_url": "https://avatars0.githubusercontent.com/u/4010598?v=4", 53 | "profile": "https://github.com/davidfor", 54 | "contributions": [ 55 | "code" 56 | ] 57 | } 58 | ], 59 | "contributorsPerLine": 7 60 | } 61 | -------------------------------------------------------------------------------- /.deepsource.toml: -------------------------------------------------------------------------------- 1 | version = 1 2 | 3 | [[analyzers]] 4 | name = "shell" 5 | 6 | [[analyzers]] 7 | name = "python" 8 | 9 | [analyzers.meta] 10 | runtime_version = "3.x.x" 11 | additional_builtins = ["_", "ngettext"] 12 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | --- 2 | issuehunt: jgoguen 3 | ko_fi: jgoguen 4 | liberapay: jgoguen 5 | custom: ["https://paypal.me/jtgoguen", "https://www.buymeacoffee.com/jgoguen"] 6 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Report an error in the current functionality of a plugin from this repository 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | --- 8 | 9 | 10 | # Bug Checklist 11 | 12 | These items are mandatory. If you need help finding this information submit the 13 | bug report with as much completed as you can and ask for help finding the rest. 14 | 15 | - [ ] I am using the latest version of calibre to report this bug, which is: 16 | - [ ] I am using an official calibre release, not one from a third party (e.g. 17 | your Linux distro, Flatpak, Chocolatey package, Homebrew, etc.) 18 | - [ ] I am using the latest version of this plugin, which is: 19 | - [ ] My operating system is (e.g. Windows 10, Windows 8.1, Windows 8, macOS 20 | 10.15.5, Fedora 32, Arch Linux, etc.): 21 | - [ ] I have included the full, complete, unmodified debug log from calibre 22 | - Directions for getting the debug log are under the "Logs" header below. 23 | - [ ] I have translated the text in any screenshots and logs to English, or all 24 | screenshots and logs included are in English. 25 | 26 | These items are optional. Fill in as much of them as possible. If something is 27 | not applicable to your bug report, note that. 28 | 29 | - [ ] I have installed the Scramble Epub plugin (see 30 | https://www.mobileread.com/forums/showthread.php?t=267998) and will attach 31 | a **scrambled** copy of the book I'm having problems with (attach a file by 32 | dragging and dropping onto the Github editor). 33 | - [ ] If this is a conversion bug, I will also attach a **scrambled** copy of 34 | the converted book. 35 | - [ ] The path to my calibre library or to a book in my calibre library has 36 | non-ASCII characters: yes/no 37 | - [ ] If I am using Windows 10, I (have/have not) enabled Windows' beta support 38 | for Unicode (see 39 | https://www.mobileread.com/forums/showpost.php?p=3988195&postcount=2052) 40 | - [ ] If I am using Windows 10, does this bug happens with beta Unicode support 41 | both enabled and disabled, only when enabled, or only when disabled? 42 | 43 | # Describe the bug 44 | 45 | A clear and concise description of what the bug is. 46 | 47 | ## Steps to Reproduce 48 | 49 | Steps to reproduce the behavior (as detailed as you can): 50 | 51 | 1. Go to '...' 52 | 1. Click on '....' 53 | 1. Scroll down to '....' 54 | 1. See error 55 | 56 | ## Expected behavior 57 | 58 | A clear and concise description of what you expected to happen. 59 | 60 | ## Actual behaviour 61 | 62 | A clear and concise description of the actual behaviour you observe. This may be a summary of the bug description. 63 | 64 | ## Screenshots 65 | 66 | If applicable, add screenshots to help explain your problem. If you are using 67 | calibre in any language other than English, please either provide a translation 68 | of any relevant text to English or switch calibre to use English first. 69 | 70 | ## Logs 71 | 72 | Restart calibre in debug mode. Paste the full calibre debug log here. To get the 73 | debug log: 74 | 75 | 1. Find the `Preferences` button in the calibre toolbar. 76 | 1. Click the arrow to the right of `Preferences`. 77 | 1. Select the `Restart in debug mode` menu item. 78 | 1. This will shut down and restart calibre immediately. Calibre will 79 | automatically restart, but it may take a few seconds. 80 | 1. You will see a notification informing you that you have started calibre 81 | in debug mode. Click `OK`. 82 | 1. Do the minimum possible steps to reproduce the bug. 83 | 1. Close calibre. 84 | 1. This will automatically display the debug log. Copy and paste the entire 85 | log in the blank space here (between `` ```text `` and `` ``` ``) 86 | 87 | ```text 88 | 89 | ``` 90 | 91 | ## Additional context 92 | 93 | Add any other information you think might be helpful. 94 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "Feature Request/Enhancement" 3 | about: Request a new feature or a change/enhancement to an existing feature 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | --- 8 | 9 | 10 | # Description 11 | 12 | Describe your requested new feature, or feature enhancement, in as much detail 13 | as you can. If your proposed change involves book conversion and you can show 14 | where in a book it would be useful, install the Scramble Epub plugin (see 15 | https://www.mobileread.com/forums/showthread.php?t=267998), attach a scrambled 16 | KePub book, and describe where in the book I should look and what you expect 17 | the result should be. 18 | 19 | ## Which plugins 20 | 21 | Which plugin(s) does this apply to? 22 | 23 | ## Workarounds 24 | 25 | If this feature request will make some part of your workflow with calibre and 26 | KePub books easier, what are you doing right now to achieve the same end result? 27 | 28 | ## How useful could this be 29 | 30 | Make your best guess at how useful this might be to other people using these 31 | plugins, and if you think it might be useful to relatively few people or to a 32 | lot of people and why. 33 | 34 | ## Additional context 35 | 36 | Add any other information you think might be helpful. 37 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | # Pull Request: (short title summary) 2 | 3 | ## Description of change 4 | 5 | A complete description of what you are changing. Include the issue number which 6 | this PR will close (create an issue first if you have not already done so). The 7 | issue should describe the problem or proposed new feature, the pull request 8 | should describe in detail what is being changed. There may be sometimes 9 | significant overlap between what you write in the issue and what you write here; 10 | that's OK! 11 | 12 | ## Test results 13 | 14 | Changes to code need to come with updates to unit tests as much as is feasible. 15 | Include the results of your testing (on macOS and Linux, the output of running 16 | `make test`). If you are not changing code, just delete this section. 17 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # vim: fileencoding=UTF-8:expandtab:autoindent:ts=2:sts=2:sw=2:filetype=yaml 3 | # yaml-language-server: $schema=https://json.schemastore.org/github-workflow 4 | name: CI 5 | 6 | # Controls when the action will run. Workflow runs when manually triggered 7 | # using the UI or API. 8 | "on": 9 | push: 10 | pull_request: 11 | 12 | # A workflow run is made up of one or more jobs that can run sequentially or 13 | # in parallel 14 | jobs: 15 | test: 16 | runs-on: ${{ matrix.os }} 17 | strategy: 18 | fail-fast: false 19 | matrix: 20 | os: 21 | - "ubuntu-latest" 22 | 23 | steps: 24 | - uses: actions/checkout@v4 25 | with: 26 | fetch-depth: 1 27 | 28 | - name: Set up Python 29 | uses: actions/setup-python@v5 30 | with: 31 | python-version: "3.11" 32 | 33 | - name: Install dependencies 34 | run: | 35 | PLATFORM=$(uname) 36 | if [ "${PLATFORM}" = "Linux" ]; then 37 | sudo apt-get update 38 | sudo apt-get install -y zsh gettext libegl1 libopengl0 libglx0 libxkbcommon0 39 | fi 40 | 41 | # yamllint disable rule:line-length 42 | - name: Set environment variables 43 | run: | 44 | CALIBRE_DIR="$(mktemp -d XXXXXXXX)" 45 | printf 'CALIBRE_DIR="%s"\n' "${CALIBRE_DIR}" >>"${GITHUB_ENV}" 46 | printf 'CALIBRE_CONFIG_DIRECTORY="%s"\n' "${CALIBRE_DIR}/config" >>"${GITHUB_ENV}" 47 | printf 'CALIBRE_TEMP_DIR="%s"\n' "${CALIBRE_DIR}/tmp" >>"${GITHUB_ENV}" 48 | # yamllint enable rule:line-length 49 | - name: Create calibre directories 50 | run: | 51 | mkdir -p "${CALIBRE_CONFIG_DIRECTORY}" "${CALIBRE_TEMP_DIR}" 52 | 53 | - name: Install calibre from upstream 54 | run: ./scripts/update-calibre.py 55 | 56 | - name: Build plugin ZIP files 57 | run: ./scripts/build.sh 58 | 59 | - name: Install Python test dependencies 60 | run: | 61 | set -x 62 | python3 -m pip install --upgrade pip 63 | if [ -f requirements.txt ]; then 64 | python3 -m pip install -r requirements.txt 65 | fi 66 | if [ -f scripts/requirements.txt ]; then 67 | python3 -m pip install -r scripts/requirements.txt 68 | fi 69 | if [ -f tests/requirements.txt ]; then 70 | python3 -m pip install -r tests/requirements.txt 71 | fi 72 | 73 | - name: Run tests 74 | run: ./scripts/build.sh test 75 | -------------------------------------------------------------------------------- /.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # vim: fileencoding=UTF-8:expandtab:autoindent:ts=2:sts=2:sw=2:filetype=yaml 3 | # yaml-language-server: $schema=https://json.schemastore.org/github-workflow 4 | name: Lint 5 | 6 | "on": 7 | push: 8 | branches: 9 | - "*" 10 | pull_request: 11 | 12 | jobs: 13 | ruff: 14 | runs-on: ubuntu-latest 15 | 16 | steps: 17 | - uses: actions/checkout@v4 18 | with: 19 | fetch-depth: 1 20 | 21 | - name: Set up Python 22 | uses: actions/setup-python@v5 23 | with: 24 | python-version: "3.11" 25 | 26 | - name: Install Ruff 27 | run: pip install ruff 28 | 29 | - name: Lint Python 30 | run: | 31 | ruff check --output-format github 32 | ruff format --diff 33 | 34 | shellcheck: 35 | runs-on: ubuntu-latest 36 | 37 | steps: 38 | - uses: actions/checkout@v4 39 | with: 40 | fetch-depth: 1 41 | 42 | - name: Install ShellCheck 43 | run: | 44 | sudo apt-get update 45 | sudo apt-get install -y zsh shellcheck 46 | 47 | - name: Run ShellCheck 48 | run: shellcheck --severity=error --shell=sh **/*.sh 49 | 50 | yamllint: 51 | runs-on: ubuntu-latest 52 | 53 | steps: 54 | - uses: actions/checkout@v4 55 | with: 56 | fetch-depth: 1 57 | 58 | - name: Set up Python 59 | uses: actions/setup-python@v5 60 | with: 61 | python-version: "3.11" 62 | 63 | - name: Install yamllint 64 | run: pip install yamllint 65 | 66 | - name: Run yamllint 67 | run: yamllint -f colored ./.github/workflows/ 68 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # vim: fileencoding=UTF-8:expandtab:autoindent:ts=2:sts=2:sw=2:filetype=yaml 3 | # yaml-language-server: $schema=https://json.schemastore.org/github-workflow 4 | name: Populate Release 5 | 6 | "on": 7 | push: 8 | tags: 9 | - "v*" 10 | 11 | jobs: 12 | upload-assets: 13 | runs-on: "ubuntu-latest" 14 | 15 | steps: 16 | - name: Install repo dependencies 17 | run: | 18 | sudo apt-get update 19 | sudo apt-get install -y gettext 20 | 21 | - name: Check out release tag 22 | uses: actions/checkout@v4 23 | with: 24 | fetch-depth: 1 25 | 26 | - name: Set up Python 27 | uses: actions/setup-python@v5 28 | with: 29 | python-version: "3.11" 30 | 31 | - name: Fetch calibre 32 | run: ./scripts/update-calibre.py 33 | 34 | - name: Build ZIP files 35 | run: ./scripts/build.sh build 36 | 37 | - name: Create GitHub release 38 | if: runner.environment == 'github-hosted' 39 | uses: https://github.com/softprops/action-gh-release@v2 40 | with: 41 | files: "release/*.zip" 42 | make_latest: true 43 | generate_release_notes: true 44 | 45 | - name: Create Forgejo release 46 | if: runner.environment != 'github-hosted' 47 | uses: https://code.forgejo.org/actions/forgejo-release@v2 48 | with: 49 | direction: upload 50 | token: ${{ secrets.TOKEN }} 51 | tag: ${{ github.ref_name }} 52 | release-dir: release 53 | release-notes-assistant: true 54 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | *.pyo 3 | *.pyd 4 | *.pyw 5 | calibre 6 | calibre-py[23] 7 | 8 | # IDE files 9 | .settings 10 | .includepath 11 | .classpath 12 | *.xcodeproj 13 | *.kpf 14 | *.komodoproject 15 | .komodotools 16 | 17 | # CTags 18 | .tags 19 | .tags_sorted_by_file 20 | 21 | test-books/ 22 | /*.zip 23 | TODO 24 | .checkstyle 25 | /__init__.py 26 | .DS_Store 27 | translations/*.mo 28 | venv 29 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | default_language_version: 3 | python: python3 4 | minimum_pre_commit_version: "2.7.1" 5 | repos: 6 | - repo: https://github.com/pre-commit/pre-commit-hooks 7 | rev: v5.0.0 8 | hooks: 9 | - id: check-case-conflict 10 | - id: mixed-line-ending 11 | args: 12 | - "--fix=lf" 13 | - repo: https://github.com/astral-sh/ruff-pre-commit 14 | rev: v0.8.4 15 | hooks: 16 | # Linter 17 | - id: ruff 18 | args: 19 | - "--fix" 20 | - "--show-fixes" 21 | # Formatter 22 | - id: ruff-format 23 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "python.autoComplete.extraPaths": [ 3 | "${workspaceFolder:calibre}/src" 4 | ], 5 | "python.pythonPath": "/usr/bin/python3", 6 | "python.analysis.extraPaths": [ 7 | "${workspaceFolder:calibre}/src" 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | // See https://go.microsoft.com/fwlink/?LinkId=733558 3 | // for the documentation about the tasks.json format 4 | "version": "2.0.0", 5 | "tasks": [ 6 | { 7 | "label": "Build", 8 | "type": "process", 9 | "command": "/usr/bin/make", 10 | "args": [ 11 | "-f", 12 | { 13 | "quoting": "strong", 14 | "value": "${workspaceFolder}/Makefile" 15 | }, 16 | "build" 17 | ], 18 | "options": { 19 | "cwd": "${workspaceFolder}" 20 | }, 21 | "presentation": { 22 | "clear": true, 23 | "panel": "dedicated" 24 | }, 25 | "group": { 26 | "kind": "build", 27 | "isDefault": true 28 | } 29 | }, 30 | { 31 | "label": "Run Python 2 Unit Tests", 32 | "type": "process", 33 | "command": "/usr/bin/make", 34 | "args": [ 35 | "-f", 36 | { 37 | "quoting": "strong", 38 | "value": "${workspaceFolder}/Makefile" 39 | }, 40 | "build", 41 | "test_py2" 42 | ], 43 | "options": { 44 | "cwd": "${workspaceFolder}", 45 | "env": { 46 | "PYTHONDONTWRITEBYTECODE": "true" 47 | } 48 | }, 49 | "presentation": { 50 | "clear": true, 51 | "panel": "dedicated" 52 | }, 53 | "group": "test" 54 | }, 55 | { 56 | "label": "Run Python 3 Unit Tests", 57 | "type": "process", 58 | "command": "/usr/bin/make", 59 | "args": [ 60 | "-f", 61 | { 62 | "quoting": "strong", 63 | "value": "${workspaceFolder}/Makefile" 64 | }, 65 | "build", 66 | "test_py3" 67 | ], 68 | "options": { 69 | "cwd": "${workspaceFolder}", 70 | "env": { 71 | "PYTHONDONTWRITEBYTECODE": "true" 72 | } 73 | }, 74 | "presentation": { 75 | "clear": true, 76 | "panel": "dedicated" 77 | }, 78 | "group": "test" 79 | }, 80 | { 81 | "label": "Run Unit Tests", 82 | "type": "process", 83 | "command": "/usr/bin/make", 84 | "args": [ 85 | "-f", 86 | { 87 | "quoting": "strong", 88 | "value": "${workspaceFolder}/Makefile" 89 | }, 90 | "test" 91 | ], 92 | "presentation": { 93 | "clear": true, 94 | "panel": "dedicated" 95 | }, 96 | "problemMatcher": [], 97 | "group": { 98 | "kind": "test", 99 | "isDefault": true 100 | } 101 | } 102 | ] 103 | } 104 | -------------------------------------------------------------------------------- /.yamllint.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | rules: 3 | line-length: 4 | max: 120 5 | allow-non-breakable-words: true 6 | allow-non-breakable-inline-mappings: true 7 | -------------------------------------------------------------------------------- /CONTRIBUTORS.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
hub2git 📖 |
7 | dchawisher 🐛 |
8 | Byte6d65 🐛 |
9 | NiLuJe 💻 |
10 | David 💻 |
11 |
16 | Copyright 17 |
18 |
20 | Reference Book
21 |
22 | Copyright
25 | All rights reserved. 26 |
27 |28 | Electronic editions published 2020. 29 |
30 |16 | Neque porro quisquam est qui dolorem ipsum quia dolor 17 | sit amet, consectetur, adipisci velit 18 |
19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /tests/test_files/page_github_136.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |Capitolo 1
14 | 15 |16 | 17 |
2014
18 | 19 |20 | 21 |
Sto ripulendo la cucina dagli avanzi della colazione quando il mio telefono di 22 | lavoro squilla, facendomi fermare di scatto. Vedo il nome della mia assistente lampeggiare sullo schermo.
23 | 24 |«Ciao Jennifer, che succede?»
25 | 26 |«C’è questa ragazza». La sua voce giunge trafelata. «Finirà massacrata dall’accusa 27 | se non accetti di occuparti del suo caso».
28 | 29 |Stringendo il telefono tra l’orecchio e la spalla, sciacquo via i Coco Pops da una 30 | scodella di cereali. Non c’è tempo da perdere, sono già in ritardo. «Okay, ti ascolto».
31 | 32 |«Sono arrivata presto per depositare i documenti del caso Preston. Stavo 33 | aspettando l’arrivo dell’impiegato quando ho sentito Sarah, l’avvocato d’ufficio, parlare di questo caso».
34 | 35 |Jennifer si interrompe per respirare.
36 | 37 |«Quindi, di cosa si tratta?», la incalzo.
38 | 39 |«C’è questa ragazza, Chloe. Ha quindici anni e l’accusano di tentato omicidio». 40 |
41 | 42 |«Che cosa ha fatto?». Spostando il telefono all’altro orecchio continuo a pulire, 43 | e intanto la incito mentalmente a raccontarmi la storia per intero invece di darmi brandelli di informazioni.
44 | 45 |«Ha investito un tizio ed è scappata». La sua voce è pervasa di eccitazione.
46 | 47 |«Un momento, che cosa ci faceva al volante? Non hai detto che ha solo quindici 48 | anni?»
49 | 50 |«Sì, è così. È salita in auto e l’ha investito in retromarcia».
51 | 52 |«Come ha ottenuto le chiavi? Gliele ha rubate?»
53 | 54 |«Non ne sono sicura…». La voce di Jennifer si spegne.
55 | 56 |«D’accordo, possiamo scoprirlo più avanti. Lui è ferito?»
57 | 58 |«Oh sì». Di colpo si rianima. «È ancora in ospedale. Ha entrambe le gambe rotte, 59 | un paio di costole fratturate, un polmone perforato e una grave emorragia interna. I dottori non sanno se 60 | riprenderà mai a camminare».
61 | 62 |«Ahia». Faccio una smorfia e rabbrividisco, cercando di togliermi dalla testa 63 | l’immagine del corpo ferito di questo sconosciuto.
64 | 65 |«Sarah ha suggerito di parlarti del caso, vedere se avevi tempo di occupartene», 66 | prosegue Jennifer.
67 | 68 |Inspirando a fondo, rifletto sulla mia attuale mole di lavoro. «Non lo so. Sai 69 | quanto sono impegnata al momento».
70 | 71 |«Sì, ma cerchi sempre di aiutare le giovani donne, le ragazze che non hanno nessun 72 | altro a cui rivolgersi. Ed è qualche mese che non prendi un caso pro bono».
73 | 74 |Jennifer ha ragione. I casi in cui l’accusata ha una storia difficile, quelli da 75 | cui gli altri fuggirebbero a gambe levate, mi toccano sempre e mi stimolano a fare del mio meglio.
76 | 77 |«Sei ancora lì?»
78 | 79 |«Sì, sì», rispondo in fretta, tornando alla realtà. «Non lo so. È un’omissione di 80 | soccorso. Vale la pena?»
81 | 82 |«Be’, non è il tipico caso di cui tendi a occuparti. Ma il fatto che non sia una 83 | vittima di violenza non significa che non meriti una difesa solida. E sai quanto sono impegnati gli avvocati 84 | d’ufficio», insiste. «Sarah sta seguendo altri diciotto processi. Non avrebbe tempo di difenderla come si deve. La 85 | ragazza è spacciata».
86 | 87 |C’è qualcosa che non torna in questa descrizione del caso. Dentro di me una vocina 88 | consiglia di non perdere tempo, di passare oltre. «I suoi genitori non possono trovarle un buon legale?»
89 | 90 |«Non lo so, ma se è stata mandata da un difensore d’ufficio probabilmente non ha 91 | altra scelta. Presumo».
92 | 93 |Nonostante le mie riserve, sono intrigata. «Puoi chiedere a Sarah il fascicolo del 94 | caso?»
95 | 96 |«Te ne ho già preso una copia. La troverai sulla scrivania appena arrivi». Sul mio 97 | volto si allarga un sorriso. Gli straordinari talenti organizzativi di Jennifer mi permettono di concentrarmi su 98 | ciò che conta davvero: difendere i clienti.
99 | 100 |Jennifer riattacca e io continuo a pulire la cucina. Questa mattina c’è stato il 101 | solito delirio mentre vestivo i miei due bambini, preparavo loro il pranzo e controllavo che finissero la 102 | colazione. Come ogni giorno mio marito è uscito per primo, lasciandomi ad affrontare il disastro della nostra 103 | convulsa routine mattutina. «Devo andare», ha detto. «Voglio evitare il traffico».
104 | 105 |«Lo dici tutti i giorni e rimani sempre imbottigliato», ho risposto, scuotendo la 106 | testa mentre guardavo il disordine.
107 | 108 |«Questa è la volta buona. Me lo sento», ha ribattuto, baciandomi sulla guancia 109 | prima di sfrecciare fuori. Il suo ottimismo è ammirevole, ma sarebbe bello se ogni tanto mi desse una mano a 110 | pulire. Ancora non riesco a capire perché insiste per andare al lavoro in auto invece di prendere la metro. Gli 111 | farebbe senz’altro risparmiare del tempo, per non parlare dello stress di restare bloccato nel traffico. Ma del 112 | resto, anche io mi rifiuto di fare come buona parte dei londinesi, che utilizzano i trasporti pubblici. Guidare mi 113 | dà il tempo di pensare, la possibilità di saltare in auto e andarmene ogni volta che ne ho bisogno. E odio stare a 114 | stretto contatto con tutta quella gente, pigiata contro il lato della vettura durante l’ora di punta.
115 | 116 |La lavastoviglie borbotta, indicando l’inizio del ciclo di lavaggio. Mentre mi 117 | volto per uscire, la vivace tazza di Peppa Pig di mia figlia attira la mia attenzione. Sporgendomi sull’isola 118 | della cucina ne afferro il beccuccio rosa ma, quando lo faccio, il coperchio si stacca e rovescia succo di 119 | mirtillo rosso sulla superficie bianca.
120 | 121 |Un grido soffocato mi sfugge prima che possa fermarlo e in fretta chiudo gli 122 | occhi, il corpo scosso dai tremiti. Posando il coperchio della tazza, mi aggrappo forte al piano per farmi forza. 123 | Odio il colore rosso. Lo detesto così tanto che sono capace di tutto pur di non vederlo. Per anni ho evitato 124 | qualunque cibo rosso. La mia dieta non contemplava fragole, barbabietole o pomodori. E la carne doveva essere ben 125 | cotta, le bistecche strinate fino ad asciugare ogni goccia di sangue. Era l’unico modo in cui potessi mangiarle. 126 | Mio marito sa che questa avversione è legata alla mia paura del sangue, ma ho lasciato che lui, come chiunque 127 | altro venga a conoscenza del mio odio, la ritenga una conseguenza di quando, da ragazzina, ho visto un cane morire 128 | dopo essere stato investito da un’auto fuori dalla scuola. Non possono certo immaginare che sia stato un altro 129 | episodio cruento, soltanto un paio di anni più tardi, a consolidare l’avversione per qualunque cosa mi ricordi il 130 | sangue.
131 | 132 |133 | 134 |
135 |
16 | Hail Mary, full of grace,
17 | the Lord is with thee.
18 | Blessed art thou among women,
19 | and blessed is the fruit of thy womb, Jesus.
20 |
22 | Holy Mary, Mother of God,
23 | pray for us sinners,
24 | now and at the hour of our death.
25 |
16 | Copyright 17 |
18 | 19 |
20 | Reference Book
21 |
22 | Copyright © 2020
23 |
25 | All rights reserved. 26 |
27 |28 | Electronic editions published 2020. 29 |
30 |15 | Copyright 16 |
17 |
18 | Reference Book
19 |
20 | Copyright © 2020
21 |
23 | All rights reserved. 24 |
25 |26 | Electronic editions published 2020. 27 |
28 |13 | Copyright 14 |
15 |
16 | Reference Book
17 |
18 | Copyright © 2020
19 |
21 | All rights reserved. 22 |
23 |24 | Electronic editions published 2020. 25 |
26 |Copyright
17 | 18 |
19 | Reference Book
20 |
21 | Copyright © 2020
22 |
All rights reserved.
29 |Electronic editions published 2020.
30 |tag" 353 | msgid_plural "{p_count}
tags" 354 | msgstr[0] "{p_count}
tag" 355 | msgstr[1] "{p_count}
tags"
356 |
357 | #: container.py:513
358 | msgid "Kobo tag present"
359 | msgid_plural "Kobo tags present"
360 | msgstr[0] "Kobo tag present"
361 | msgstr[1] "Kobo tags present"
362 |
--------------------------------------------------------------------------------
/translations/en_CA.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: calibre-kobo-driver\n"
4 | "Report-Msgid-Bugs-To: FULL NAME tag"
353 | msgid_plural "{p_count} tags"
354 | msgstr[0] "{p_count} tag"
355 | msgstr[1] "{p_count} tags"
356 |
357 | #: container.py:513
358 | msgid "Kobo tag present"
359 | msgid_plural "Kobo tags present"
360 | msgstr[0] "Kobo tag present"
361 | msgstr[1] "Kobo tags present"
362 |
--------------------------------------------------------------------------------
/translations/es.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR Joel Goguen
3 | # This file is distributed under the same license as the calibre-kobo-driver package.
4 | # FIRST AUTHOR tag"
86 | msgid_plural "{p_count:d} tags"
87 | msgstr[0] "{p_count:d} etiqueta"
88 | msgstr[1] "{p_count:d} etiquetas"
89 | msgstr[2] "{p_count:d} etiquetas"
90 |
91 | #: container.py:538
92 | msgid "Kobo tag present"
93 | msgid_plural "Kobo tags present"
94 | msgstr[0] "Etiqueta Kobo presente"
95 | msgstr[1] "Etiquetas Kobo presentes"
96 | msgstr[2] "Etiquetas Kobo presentes"
97 |
98 | #: conversion/input_config.py:40
99 | msgid "Options specific to KePub input."
100 | msgstr "Opciones específicas para entrada KePub."
101 |
102 | #: conversion/input_config.py:65
103 | msgid "Strip Kobo spans"
104 | msgstr "Eliminar los spans de Kobo"
105 |
106 | #: conversion/kepub_input.py:40
107 | msgid ""
108 | "Kepubs have spans wrapping each sentence. These are used by the ereader for "
109 | "the reading location and bookmark location. They are not used by an ePub "
110 | "reader but are valid code and can be safely be left in the ePub. If you plan"
111 | " to edit the ePub, it is recommended that you remove the spans."
112 | msgstr ""
113 | "Kepus tienen etiquetas span rodeando cada frase. El lector las usa para la "
114 | "ubicación de lectura y marcadores. Un lector ePub no las usa, pero son "
115 | "válidas y se pueden dejar con seguridad en el ePub. Si planeas editar tu "
116 | "ePub, se recomienda que elimines las etiquetas span."
117 |
118 | #: conversion/kepub_input.py:100
119 | #, python-brace-format
120 | msgid "{0} is not a valid KEPUB file (could not find opf)"
121 | msgstr "{0} no es un archivo KEPUB válido (no se pudo encontrar opf)"
122 |
123 | #: conversion/kepub_input.py:133
124 | msgid "EPUB files with DTBook markup are not supported"
125 | msgstr "No se soportan archivos EPUB con marcado DTBook."
126 |
127 | #: conversion/kepub_input.py:158
128 | msgid "No valid entries in the spine of this EPUB"
129 | msgstr "No hay entradas válidas en el bloque tag"
82 | msgid_plural "{p_count:d} tags"
83 | msgstr[0] "{p_count:d} étiquette"
84 | msgstr[1] "{p_count:d} étiquettes"
85 |
86 | #: container.py:538
87 | msgid "Kobo tag present"
88 | msgid_plural "Kobo tags present"
89 | msgstr[0] "Étiquette Kobo présente"
90 | msgstr[1] "Étiquettes Kobo présentes"
91 |
92 | #: conversion/input_config.py:40
93 | msgid "Options specific to KePub input."
94 | msgstr "Options d'entrée spécifiques aux KePub."
95 |
96 | #: conversion/input_config.py:65
97 | msgid "Strip Kobo spans"
98 | msgstr "Supprimer les spans Kobo"
99 |
100 | #: conversion/kepub_input.py:40
101 | msgid ""
102 | "Kepubs have spans wrapping each sentence. These are used by the ereader for "
103 | "the reading location and bookmark location. They are not used by an ePub "
104 | "reader but are valid code and can be safely be left in the ePub. If you plan"
105 | " to edit the ePub, it is recommended that you remove the spans."
106 | msgstr ""
107 | "Les Kepubs ont des balises span autour de chaque phrase. Celles-ci sont "
108 | "utilisées par la liseuse pour l'emplacement dans le livre et les marque-"
109 | "pages. Ces balises ne sont pas utilisées par le lecteur d'ePub mais sont du "
110 | "code valide et peuvent être laissés dans l'ePub sans aucun problème. Si vous"
111 | " souhaitez modifier l'ePub, il est recommandé de supprimer les balises span."
112 |
113 | #: conversion/kepub_input.py:100
114 | #, python-brace-format
115 | msgid "{0} is not a valid KEPUB file (could not find opf)"
116 | msgstr ""
117 | "{0} n'est pas un fichier KEPUB valide (impossible de trouver le fichier opf)"
118 |
119 | #: conversion/kepub_input.py:133
120 | msgid "EPUB files with DTBook markup are not supported"
121 | msgstr "Les fichiers EPUB avec balisage DTBook ne sont pas pris en charge"
122 |
123 | #: conversion/kepub_input.py:158
124 | msgid "No valid entries in the spine of this EPUB"
125 | msgstr "Aucune entrée valide dans la structure de cet EPUB"
126 |
127 | #: conversion/kepub_output.py:50
128 | msgid "Select this to add a CSS file which enables hyphenation."
129 | msgstr "Ajouter un fichier CSS qui activera la césure."
130 |
131 | #: conversion/kepub_output.py:53
132 | msgid ""
133 | "The language used will be the language defined for the book in calibre."
134 | msgstr "La langue utilisée sera la langue définie dans calibre pour ce livre."
135 |
136 | #: conversion/kepub_output.py:57
137 | msgid ""
138 | "Please see the README file for directions on updating hyphenation "
139 | "dictionaries."
140 | msgstr ""
141 | "Pour savoir comment mettre à jour les dictionnaires de césures automatiques,"
142 | " consulter le ficher README."
143 |
144 | #: conversion/kepub_output.py:69
145 | msgid "Select this to disable all hyphenation in a book."
146 | msgstr ""
147 | "Sélectionner cette option pour désactiver toute césure automatique dans un "
148 | "livre."
149 |
150 | #: conversion/kepub_output.py:72
151 | msgid "This takes precedence over the hyphenation option."
152 | msgstr "Cette option supersède l'option de césure automatique."
153 |
154 | #: conversion/kepub_output.py:80 device/koboextended_config.py:164
155 | msgid "Select this to clean up the internal ePub markup."
156 | msgstr "Nettoyer les balises internes de l'ePub."
157 |
158 | #: conversion/kepub_output.py:86
159 | msgid ""
160 | "Sets the minimum word length, in characters, for hyphenation to be allowed."
161 | msgstr ""
162 | "Définit la longueur minimale des mots, en caractères, pour que la césure "
163 | "soit autorisée."
164 |
165 | #: conversion/kepub_output.py:94
166 | msgid ""
167 | "Sets the minimum number of characters which must appear before a hyphen"
168 | msgstr ""
169 | "Fixe le nombre minimum de caractères qui doivent apparaître avant un trait "
170 | "d'union"
171 |
172 | #: conversion/kepub_output.py:102
173 | msgid "Sets the minimum number of characters which must appear after a hyphen"
174 | msgstr ""
175 | "Fixe le nombre minimum de caractères qui doivent apparaître après un trait "
176 | "d'union"
177 |
178 | #: conversion/kepub_output.py:111
179 | msgid "Sets the maximum number of consecutive lines that may be hyphenated."
180 | msgstr ""
181 | "Définit le nombre maximum de lignes consécutives qui peuvent être séparées "
182 | "par un trait d'union."
183 |
184 | #: conversion/kepub_output.py:114
185 | msgid "Set this to 0 to disable limiting."
186 | msgstr "Réglez ce paramètre sur 0 pour désactiver la limitation."
187 |
188 | #: conversion/output_config.py:32
189 | msgid "Options specific to KePub output"
190 | msgstr "Options de sortie spécifiques aux KePub"
191 |
192 | #: conversion/output_config.py:81 device/koboextended_config.py:146
193 | msgid "Hyphenate Files"
194 | msgstr "Césure automatique"
195 |
196 | #: conversion/output_config.py:89 device/koboextended_config.py:200
197 | msgid "Disable hyphenation"
198 | msgstr "Désactiver la césure"
199 |
200 | #: conversion/output_config.py:96 device/koboextended_config.py:206
201 | msgid "Minimum word length to hyphenate"
202 | msgstr "Longueur minimale des mots jusqu'au trait d'union"
203 |
204 | #: conversion/output_config.py:103 conversion/output_config.py:185
205 | #: device/koboextended_config.py:212 device/koboextended_config.py:283
206 | msgid "Disabled"
207 | msgstr "Désactivé"
208 |
209 | #: conversion/output_config.py:108 conversion/output_config.py:134
210 | #: conversion/output_config.py:161 device/koboextended_config.py:217
211 | #: device/koboextended_config.py:238 device/koboextended_config.py:262
212 | msgid "character"
213 | msgstr "caractère"
214 |
215 | #: conversion/output_config.py:109 conversion/output_config.py:135
216 | #: conversion/output_config.py:162 device/koboextended_config.py:218
217 | #: device/koboextended_config.py:239 device/koboextended_config.py:263
218 | msgid "characters"
219 | msgstr "caractères"
220 |
221 | #: conversion/output_config.py:117 device/koboextended_config.py:224
222 | msgid "Minimum characters before hyphens"
223 | msgstr "Caractères minimums avant les traits d'union"
224 |
225 | #: conversion/output_config.py:144 device/koboextended_config.py:248
226 | msgid "Minimum characters after hyphens"
227 | msgstr "Caractères minimums après les traits d'union"
228 |
229 | #: conversion/output_config.py:171 device/koboextended_config.py:272
230 | msgid "Maximum consecutive hyphenated lines"
231 | msgstr "Nombre maximal de traits d'union consécutifs"
232 |
233 | #: conversion/output_config.py:191 device/koboextended_config.py:289
234 | msgid "line"
235 | msgstr "ligne"
236 |
237 | #: conversion/output_config.py:192 device/koboextended_config.py:290
238 | msgid "lines"
239 | msgstr "lignes"
240 |
241 | #: conversion/output_config.py:203
242 | msgid "Clean up ePub markup"
243 | msgstr "Nettoyer le balisage ePub"
244 |
245 | #: device/koboextended_config.py:66
246 | msgid "Extended"
247 | msgstr "Options étendus"
248 |
249 | #: device/koboextended_config.py:111
250 | msgid "Extended driver"
251 | msgstr "Pilote étendu"
252 |
253 | #: device/koboextended_config.py:119
254 | msgid "Enable Extended Kobo Features"
255 | msgstr "Activer les fonctionnalités étendues Kobo"
256 |
257 | #: device/koboextended_config.py:120
258 | msgid "Choose whether to enable extra customizations"
259 | msgstr "Activer les options de personnalisation supplémentaires"
260 |
261 | #: device/koboextended_config.py:125
262 | msgid "Upload DRM-encumbered ePub files"
263 | msgstr "Charger les fichiers ePub contenant des DRM"
264 |
265 | #: device/koboextended_config.py:127
266 | msgid ""
267 | "Select this to upload ePub files encumbered by DRM. If this is not selected,"
268 | " it is a fatal error to upload an encumbered file"
269 | msgstr ""
270 | "Charger les fichiers ePub qui sont protégés par des DRM. Si cette option "
271 | "n'est pas sélectionnée, l'envoi d'un fichier contenant des DRM entraine une "
272 | "erreur fatale"
273 |
274 | #: device/koboextended_config.py:135
275 | msgid "Silently Ignore Failed Conversions"
276 | msgstr "Ignorer silencieusement les conversions ayant échoué"
277 |
278 | #: device/koboextended_config.py:137
279 | msgid ""
280 | "Select this to not upload any book that fails conversion to kepub. If this "
281 | "is not selected, the upload process will be stopped at the first book that "
282 | "fails. If this is selected, failed books will be silently removed from the "
283 | "upload queue."
284 | msgstr ""
285 | "Ne pas charger les livre dont la conversion en kepub a échoué. Si cette "
286 | "option n'est pas sélectionnée, le processus de téléchargement s'arrêtera au "
287 | "premier livre qui échoue. Si cette option est sélectionnée, les livres qui "
288 | "échouent seront supprimés de la file d'attente de téléchargement "
289 | "silencieusement."
290 |
291 | #: device/koboextended_config.py:148
292 | msgid ""
293 | "Select this to add a CSS file which enables hyphenation. The language used "
294 | "will be the language defined for the book in calibre. Please see the README "
295 | "file for directions on updating hyphenation dictionaries."
296 | msgstr ""
297 | "Ajouter un fichier CSS permettant la césure. La langue utilisée sera la "
298 | "langue définie dans calibre pour ce livre. Veuillez consulter le fichier "
299 | "README pour obtenir des instructions sur la mise à jour des dictionnaires de"
300 | " césure."
301 |
302 | #: device/koboextended_config.py:157
303 | msgid "Smarten Punctuation"
304 | msgstr "Améliorer la ponctuation"
305 |
306 | #: device/koboextended_config.py:158
307 | msgid "Select this to smarten punctuation in the ePub"
308 | msgstr "Améliorer la ponctuation dans l'ePub"
309 |
310 | #: device/koboextended_config.py:163
311 | msgid "Clean up ePub Markup"
312 | msgstr "Nettoyer le balisage ePub"
313 |
314 | #: device/koboextended_config.py:169 device/koboextended_config.py:177
315 | msgid "Copy generated KePub files to a directory"
316 | msgstr "Copier les fichiers KePub générés dans un dossier"
317 |
318 | #: device/koboextended_config.py:171 device/koboextended_config.py:182
319 | msgid ""
320 | "Enter an absolute directory path to copy all generated KePub files into for "
321 | "debugging purposes."
322 | msgstr ""
323 | "Entrer le chemin absolu vers le dossier où copier les fichiers KePub générés"
324 | " à des fins de débogage."
325 |
326 | #: device/koboextended_config.py:190
327 | msgid "Use full book page numbers"
328 | msgstr "Utiliser les numéros de page du livre entier"
329 |
330 | #: device/koboextended_config.py:192
331 | msgid ""
332 | "Select this to show page numbers for the whole book, instead of each "
333 | "chapter. This will also affect regular ePub page number display!"
334 | msgstr ""
335 | "Afficher les numéros de page par rapport au livre entier, au lieu de chaque "
336 | "chapitre. Cela affectera également l'affichage des numéros de page des ePub "
337 | "!"
338 |
339 | #: device/koboextended_config.py:201
340 | msgid "Select this to disable hyphenation for books."
341 | msgstr "Désactiver la césure pour les livres."
342 |
343 | #: device/driver.py:56
344 | #, python-brace-format
345 | msgid ""
346 | "Failed to parse '{book}' by '{author}' with error: '{error}' (file: "
347 | "{filename}, line: {lineno})"
348 | msgstr ""
349 | "Échec de l'analyse de '{book}' par '{author}' avec l'erreur : '{error}' "
350 | "(fichier : {filename}, ligne : {lineno})"
351 |
352 | #: device/driver.py:79
353 | msgid ""
354 | "Communicate with Kobo Touch and later firmwares to enable extended Kobo ePub"
355 | " features."
356 | msgstr ""
357 | "Communiquez avec Kobo Touch et les firmwares ultérieurs pour activer les "
358 | "fonctionnalités étendues de Kobo ePub."
359 |
360 | #: metadata/reader.py:25
361 | msgid "Read metadata from Kobo KePub files"
362 | msgstr "Lire les métadonnées à partir du fichier Kobo KePub"
363 |
364 | #: metadata/writer.py:36
365 | msgid "Set metadata in Kobo KePub files"
366 | msgstr "Ecrire les métadonnées dans le fichier Kobo KePub"
367 |
--------------------------------------------------------------------------------
/translations/it.po:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR Joel Goguen
3 | # This file is distributed under the same license as the calibre-kobo-driver package.
4 | # FIRST AUTHOR tag"
83 | msgid_plural "{p_count:d} tags"
84 | msgstr[0] "{p_count:d} tag "
85 | msgstr[1] "{p_count:d} tag "
86 | msgstr[2] "{p_count:d} tag "
87 |
88 | #: container.py:538
89 | msgid "Kobo tag present"
90 | msgid_plural "Kobo tags present"
91 | msgstr[0] "tag Kobo presente"
92 | msgstr[1] "tag Kobo presenti"
93 | msgstr[2] "tag Kobo presenti"
94 |
95 | #: conversion/input_config.py:40
96 | msgid "Options specific to KePub input."
97 | msgstr "Opzioni specifiche per l'input KePub"
98 |
99 | #: conversion/input_config.py:65
100 | msgid "Strip Kobo spans"
101 | msgstr "Rimuovi gli span Kobo"
102 |
103 | #: conversion/kepub_input.py:40
104 | msgid ""
105 | "Kepubs have spans wrapping each sentence. These are used by the ereader for "
106 | "the reading location and bookmark location. They are not used by an ePub "
107 | "reader but are valid code and can be safely be left in the ePub. If you plan"
108 | " to edit the ePub, it is recommended that you remove the spans."
109 | msgstr ""
110 | "Nei file Kepub ogni frase è racchiusa in uno span. Questi span sono usati "
111 | "dal lettore per salvare la posizione di lettura e dei segnalibri. Non sono "
112 | "usati da un lettore di ePub, ma il loro codice è valido e può essere "
113 | "tranquillamente lasciato nell'ePub. Se pensi di modificare l'ePub, è "
114 | "raccomandato rimuovere gli span."
115 |
116 | #: conversion/kepub_input.py:100
117 | #, python-brace-format
118 | msgid "{0} is not a valid KEPUB file (could not find opf)"
119 | msgstr "{0} non è un file KEPUB valido (impossibile trovare l'opf)"
120 |
121 | #: conversion/kepub_input.py:133
122 | msgid "EPUB files with DTBook markup are not supported"
123 | msgstr "I file EPUB con formattazione DTBook non sono supportati"
124 |
125 | #: conversion/kepub_input.py:158
126 | msgid "No valid entries in the spine of this EPUB"
127 | msgstr "Non sono presenti voci valide nel dorso di questo EPUB"
128 |
129 | #: conversion/kepub_output.py:50
130 | msgid "Select this to add a CSS file which enables hyphenation."
131 | msgstr ""
132 | "Seleziona questa opzione per aggiungere un file CSS che abiliti i trattini "
133 | "morbidi."
134 |
135 | #: conversion/kepub_output.py:53
136 | msgid ""
137 | "The language used will be the language defined for the book in calibre."
138 | msgstr "La lingua utilizzata sarà quella definita per il libro in calibre."
139 |
140 | #: conversion/kepub_output.py:57
141 | msgid ""
142 | "Please see the README file for directions on updating hyphenation "
143 | "dictionaries."
144 | msgstr ""
145 | "Leggi il file README per indicazioni sull'aggiornamento dei dizionari di "
146 | "sillabazione."
147 |
148 | #: conversion/kepub_output.py:69
149 | msgid "Select this to disable all hyphenation in a book."
150 | msgstr ""
151 | "Seleziona questa opzione per disabilitare completamente i trattini morbidi "
152 | "in un libro."
153 |
154 | #: conversion/kepub_output.py:72
155 | msgid "This takes precedence over the hyphenation option."
156 | msgstr "Ha priorità rispetto all'opzione dei trattini morbidi."
157 |
158 | #: conversion/kepub_output.py:80 device/koboextended_config.py:164
159 | msgid "Select this to clean up the internal ePub markup."
160 | msgstr ""
161 | "Seleziona questa opzione per migliorare la formattazione interna dell'ePub."
162 |
163 | #: conversion/kepub_output.py:86
164 | msgid ""
165 | "Sets the minimum word length, in characters, for hyphenation to be allowed."
166 | msgstr ""
167 | "Imposta la lunghezza minima della parola, in caratteri, perché sia permessa "
168 | "l'aggiunta di trattini morbidi."
169 |
170 | #: conversion/kepub_output.py:94
171 | msgid ""
172 | "Sets the minimum number of characters which must appear before a hyphen"
173 | msgstr ""
174 | "Imposta il numero minimo di caratteri che deve apparire prima di un trattino"
175 | " morbido"
176 |
177 | #: conversion/kepub_output.py:102
178 | msgid "Sets the minimum number of characters which must appear after a hyphen"
179 | msgstr ""
180 | "Imposta il numero minimo di caratteri che deve apparire dopo un trattino "
181 | "morbido"
182 |
183 | #: conversion/kepub_output.py:111
184 | msgid "Sets the maximum number of consecutive lines that may be hyphenated."
185 | msgstr ""
186 | "Imposta il numero massimo di righe consecutive che possono avere trattini "
187 | "morbidi."
188 |
189 | #: conversion/kepub_output.py:114
190 | msgid "Set this to 0 to disable limiting."
191 | msgstr "Imposta a 0 per disabilitare la limitazione."
192 |
193 | #: conversion/output_config.py:32
194 | msgid "Options specific to KePub output"
195 | msgstr "Opzioni specifiche per l'output KePub"
196 |
197 | #: conversion/output_config.py:81 device/koboextended_config.py:146
198 | msgid "Hyphenate Files"
199 | msgstr "Aggiungi trattini morbidi ai file"
200 |
201 | #: conversion/output_config.py:89 device/koboextended_config.py:200
202 | msgid "Disable hyphenation"
203 | msgstr "Disabilita trattini morbidi"
204 |
205 | #: conversion/output_config.py:96 device/koboextended_config.py:206
206 | msgid "Minimum word length to hyphenate"
207 | msgstr "Lunghezza minima parola per i trattini morbidi"
208 |
209 | #: conversion/output_config.py:103 conversion/output_config.py:185
210 | #: device/koboextended_config.py:212 device/koboextended_config.py:283
211 | msgid "Disabled"
212 | msgstr "Disabilitato"
213 |
214 | #: conversion/output_config.py:108 conversion/output_config.py:134
215 | #: conversion/output_config.py:161 device/koboextended_config.py:217
216 | #: device/koboextended_config.py:238 device/koboextended_config.py:262
217 | msgid "character"
218 | msgstr "carattere"
219 |
220 | #: conversion/output_config.py:109 conversion/output_config.py:135
221 | #: conversion/output_config.py:162 device/koboextended_config.py:218
222 | #: device/koboextended_config.py:239 device/koboextended_config.py:263
223 | msgid "characters"
224 | msgstr "caratteri"
225 |
226 | #: conversion/output_config.py:117 device/koboextended_config.py:224
227 | msgid "Minimum characters before hyphens"
228 | msgstr "Numero minimo di caratteri prima di un trattino"
229 |
230 | #: conversion/output_config.py:144 device/koboextended_config.py:248
231 | msgid "Minimum characters after hyphens"
232 | msgstr "Numero minimo di caratteri dopo un trattino"
233 |
234 | #: conversion/output_config.py:171 device/koboextended_config.py:272
235 | msgid "Maximum consecutive hyphenated lines"
236 | msgstr "Numero massimo di righe consecutive con trattini"
237 |
238 | #: conversion/output_config.py:191 device/koboextended_config.py:289
239 | msgid "line"
240 | msgstr "riga"
241 |
242 | #: conversion/output_config.py:192 device/koboextended_config.py:290
243 | msgid "lines"
244 | msgstr "righe"
245 |
246 | #: conversion/output_config.py:203
247 | msgid "Clean up ePub markup"
248 | msgstr "Pulisci formattazione ePub"
249 |
250 | #: device/koboextended_config.py:66
251 | msgid "Extended"
252 | msgstr "Extended"
253 |
254 | #: device/koboextended_config.py:111
255 | msgid "Extended driver"
256 | msgstr "Driver esteso"
257 |
258 | #: device/koboextended_config.py:119
259 | msgid "Enable Extended Kobo Features"
260 | msgstr "Abilita Funzionalità Kobo Estese"
261 |
262 | #: device/koboextended_config.py:120
263 | msgid "Choose whether to enable extra customizations"
264 | msgstr "Scegli se abilitare funzionalità extra"
265 |
266 | #: device/koboextended_config.py:125
267 | msgid "Upload DRM-encumbered ePub files"
268 | msgstr "Carica file ePub coperti da DRM"
269 |
270 | #: device/koboextended_config.py:127
271 | msgid ""
272 | "Select this to upload ePub files encumbered by DRM. If this is not selected,"
273 | " it is a fatal error to upload an encumbered file"
274 | msgstr ""
275 | "Seleziona questa opzione per caricare file ePub coperti da DRM. Se non è "
276 | "selezionata, caricare un file del genere causa un errore irreversibile."
277 |
278 | #: device/koboextended_config.py:135
279 | msgid "Silently Ignore Failed Conversions"
280 | msgstr "Ignora silenziosamente le conversioni fallite"
281 |
282 | #: device/koboextended_config.py:137
283 | msgid ""
284 | "Select this to not upload any book that fails conversion to kepub. If this "
285 | "is not selected, the upload process will be stopped at the first book that "
286 | "fails. If this is selected, failed books will be silently removed from the "
287 | "upload queue."
288 | msgstr ""
289 | "Seleziona questa opzione per non caricare i libri per i quali fallisce la "
290 | "conversione in kepub. Se non è selezionata, il processo di caricamento verrà"
291 | " fermato al primo fallimento di conversione. Se è selezionata, i libri per i"
292 | " quali fallisce la conversione saranno silenziosamente rimossi dalla coda di"
293 | " caricamento."
294 |
295 | #: device/koboextended_config.py:148
296 | msgid ""
297 | "Select this to add a CSS file which enables hyphenation. The language used "
298 | "will be the language defined for the book in calibre. Please see the README "
299 | "file for directions on updating hyphenation dictionaries."
300 | msgstr ""
301 | "Seleziona questa opzione per aggiungere un file CSS che abiliti i trattini "
302 | "morbidi. La lingua utilizzata sarà quella definita per il libro in calibre. "
303 | "Leggi il file README per indicazioni sull'aggiornamento dei dizionari di "
304 | "sillabazione."
305 |
306 | #: device/koboextended_config.py:157
307 | msgid "Smarten Punctuation"
308 | msgstr "Punteggiatura Migliorata"
309 |
310 | #: device/koboextended_config.py:158
311 | msgid "Select this to smarten punctuation in the ePub"
312 | msgstr "Seleziona questa opzione per migliorare la punteggiatura nell'ePub"
313 |
314 | #: device/koboextended_config.py:163
315 | msgid "Clean up ePub Markup"
316 | msgstr "Pulisci formattazione ePub"
317 |
318 | #: device/koboextended_config.py:169 device/koboextended_config.py:177
319 | msgid "Copy generated KePub files to a directory"
320 | msgstr "Copia i file KePub generati in una cartella"
321 |
322 | #: device/koboextended_config.py:171 device/koboextended_config.py:182
323 | msgid ""
324 | "Enter an absolute directory path to copy all generated KePub files into for "
325 | "debugging purposes."
326 | msgstr ""
327 | "Inserisci un percorso assoluto a una cartella per copiarci tutti i file "
328 | "KePub generati, per scopi di debug."
329 |
330 | #: device/koboextended_config.py:190
331 | msgid "Use full book page numbers"
332 | msgstr "Usa numeri di pagina relativi all'intero libro"
333 |
334 | #: device/koboextended_config.py:192
335 | msgid ""
336 | "Select this to show page numbers for the whole book, instead of each "
337 | "chapter. This will also affect regular ePub page number display!"
338 | msgstr ""
339 | "Seleziona questa opzione per mostrare numeri di pagina relativi all'intero "
340 | "libro, invece che ai singoli capitoli. Questa opzione ha effetto anche sui "
341 | "numeri di pagina degli ePub normali!"
342 |
343 | #: device/koboextended_config.py:201
344 | msgid "Select this to disable hyphenation for books."
345 | msgstr ""
346 | "Seleziona questa opzione per disabilitare i trattini morbidi nei libri."
347 |
348 | #: device/driver.py:56
349 | #, python-brace-format
350 | msgid ""
351 | "Failed to parse '{book}' by '{author}' with error: '{error}' (file: "
352 | "{filename}, line: {lineno})"
353 | msgstr ""
354 | "Impossibile elaborare '{book}' di '{author}'. Errore: '{error}' (file: "
355 | "{filename}, riga: {lineno})"
356 |
357 | #: device/driver.py:79
358 | msgid ""
359 | "Communicate with Kobo Touch and later firmwares to enable extended Kobo ePub"
360 | " features."
361 | msgstr ""
362 | "Comunica con Kobo Touch e firmware successivi per abilitare le funzionalità "
363 | "estese Kobo ePub."
364 |
365 | #: metadata/reader.py:25
366 | msgid "Read metadata from Kobo KePub files"
367 | msgstr "Leggi i metadati dai file KePub di Kobo"
368 |
369 | #: metadata/writer.py:36
370 | msgid "Set metadata in Kobo KePub files"
371 | msgstr "Scrivi i metadati nei file KePub di Kobo"
372 |
--------------------------------------------------------------------------------
/translations/messages.pot:
--------------------------------------------------------------------------------
1 | # SOME DESCRIPTIVE TITLE.
2 | # Copyright (C) YEAR Joel Goguen
3 | # This file is distributed under the same license as the calibre-kobo-driver package.
4 | # FIRST AUTHOR tag"
287 | msgid_plural "{p_count} tags"
288 | msgstr[0] ""
289 | msgstr[1] ""
290 |
291 | #: container.py:513
292 | msgid "Kobo tag present"
293 | msgid_plural "Kobo tags present"
294 | msgstr[0] ""
295 | msgstr[1] ""
296 |
--------------------------------------------------------------------------------
/translations/nl.po:
--------------------------------------------------------------------------------
1 | msgid ""
2 | msgstr ""
3 | "Project-Id-Version: calibre-kobo-driver\n"
4 | "Report-Msgid-Bugs-To: FULL NAME tag"
84 | msgid_plural "{p_count:d} tags"
85 | msgstr[0] "{div_count:d} tag "
86 | msgstr[1] "{div_count:d} tags "
87 | msgstr[2] "{div_count:d} tags "
88 |
89 | #: container.py:538
90 | msgid "Kobo tag present"
91 | msgid_plural "Kobo tags present"
92 | msgstr[0] "Tag Kobo presente"
93 | msgstr[1] "Tags Kobo presentes"
94 | msgstr[2] "Tags Kobo presentes"
95 |
96 | #: conversion/input_config.py:40
97 | msgid "Options specific to KePub input."
98 | msgstr "Opções especificas para entradas KePub"
99 |
100 | #: conversion/input_config.py:65
101 | msgid "Strip Kobo spans"
102 | msgstr "Descartar espaços Kobo"
103 |
104 | #: conversion/kepub_input.py:40
105 | msgid ""
106 | "Kepubs have spans wrapping each sentence. These are used by the ereader for "
107 | "the reading location and bookmark location. They are not used by an ePub "
108 | "reader but are valid code and can be safely be left in the ePub. If you plan"
109 | " to edit the ePub, it is recommended that you remove the spans."
110 | msgstr ""
111 | "Os kepubs têm spans envolvendo cada frase. Eles são usados pelo ereader para"
112 | " ler e localizar os bookmarks. Eles não são usados por um leitor em si, mas "
113 | "são códigos válidos e podem ser deixados com segurança no arquivo ePub. Se "
114 | "você planeja editar o ePub, é recomendável remover os intervalos."
115 |
116 | #: conversion/kepub_input.py:100
117 | #, python-brace-format
118 | msgid "{0} is not a valid KEPUB file (could not find opf)"
119 | msgstr "{0} não é o arquivo KePub válido (não foi possível encontrar opf)"
120 |
121 | #: conversion/kepub_input.py:133
122 | msgid "EPUB files with DTBook markup are not supported"
123 | msgstr "Arquivos EPUB com marcação DTBook não são suportados"
124 |
125 | #: conversion/kepub_input.py:158
126 | msgid "No valid entries in the spine of this EPUB"
127 | msgstr "Nenhuma entrada válida na lombada desse EPUB"
128 |
129 | #: conversion/kepub_output.py:50
130 | msgid "Select this to add a CSS file which enables hyphenation."
131 | msgstr ""
132 | "Selecione esta opção para adicionar um arquivo CSS que permita a hifenização"
133 |
134 | #: conversion/kepub_output.py:53
135 | msgid ""
136 | "The language used will be the language defined for the book in calibre."
137 | msgstr "O idioma usado será o idioma do livro definido no calibre"
138 |
139 | #: conversion/kepub_output.py:57
140 | msgid ""
141 | "Please see the README file for directions on updating hyphenation "
142 | "dictionaries."
143 | msgstr ""
144 | "Por favor leia o ficheiro README para instruções sobre como actualizar os "
145 | "dicionários de hifenização"
146 |
147 | #: conversion/kepub_output.py:69
148 | msgid "Select this to disable all hyphenation in a book."
149 | msgstr ""
150 | "Selecione esta opção para desactivar todas as hifenizações existentes num "
151 | "livro"
152 |
153 | #: conversion/kepub_output.py:72
154 | msgid "This takes precedence over the hyphenation option."
155 | msgstr "Esta opção tem precedência sobre a opção de hifenização"
156 |
157 | #: conversion/kepub_output.py:80 device/koboextended_config.py:164
158 | msgid "Select this to clean up the internal ePub markup."
159 | msgstr "Selecione para limpar a marcação interna ePub."
160 |
161 | #: conversion/kepub_output.py:86
162 | msgid ""
163 | "Sets the minimum word length, in characters, for hyphenation to be allowed."
164 | msgstr ""
165 | "Configura o tamanho mínimo da palavra, em caracteres, para permitir a "
166 | "hifenização."
167 |
168 | #: conversion/kepub_output.py:94
169 | msgid ""
170 | "Sets the minimum number of characters which must appear before a hyphen"
171 | msgstr ""
172 | "Configura o tamanho mínimo de caracteres que deve aparecer antes de um "
173 | "hífen."
174 |
175 | #: conversion/kepub_output.py:102
176 | msgid "Sets the minimum number of characters which must appear after a hyphen"
177 | msgstr ""
178 | "Configura o tamanho mínimo de caracteres que deve aparecer antes de um "
179 | "hífen."
180 |
181 | #: conversion/kepub_output.py:111
182 | msgid "Sets the maximum number of consecutive lines that may be hyphenated."
183 | msgstr ""
184 | "Configura o número máximo de linhas consecutivas que podem ser hifenizadas."
185 |
186 | #: conversion/kepub_output.py:114
187 | msgid "Set this to 0 to disable limiting."
188 | msgstr "Configure em 0 para desabilitar limitações."
189 |
190 | #: conversion/output_config.py:32
191 | msgid "Options specific to KePub output"
192 | msgstr "Opções específicas para saída de KePub"
193 |
194 | #: conversion/output_config.py:81 device/koboextended_config.py:146
195 | msgid "Hyphenate Files"
196 | msgstr "Hifenizar Arquivos"
197 |
198 | #: conversion/output_config.py:89 device/koboextended_config.py:200
199 | msgid "Disable hyphenation"
200 | msgstr "Desabilitar hifenização"
201 |
202 | #: conversion/output_config.py:96 device/koboextended_config.py:206
203 | msgid "Minimum word length to hyphenate"
204 | msgstr "Tamanho mínimo da palavra para hifenizar"
205 |
206 | #: conversion/output_config.py:103 conversion/output_config.py:185
207 | #: device/koboextended_config.py:212 device/koboextended_config.py:283
208 | msgid "Disabled"
209 | msgstr "Desabilitado"
210 |
211 | #: conversion/output_config.py:108 conversion/output_config.py:134
212 | #: conversion/output_config.py:161 device/koboextended_config.py:217
213 | #: device/koboextended_config.py:238 device/koboextended_config.py:262
214 | msgid "character"
215 | msgstr "caractere"
216 |
217 | #: conversion/output_config.py:109 conversion/output_config.py:135
218 | #: conversion/output_config.py:162 device/koboextended_config.py:218
219 | #: device/koboextended_config.py:239 device/koboextended_config.py:263
220 | msgid "characters"
221 | msgstr "caractéres"
222 |
223 | #: conversion/output_config.py:117 device/koboextended_config.py:224
224 | msgid "Minimum characters before hyphens"
225 | msgstr "Mínimo de caracteres antes de hifenizar"
226 |
227 | #: conversion/output_config.py:144 device/koboextended_config.py:248
228 | msgid "Minimum characters after hyphens"
229 | msgstr "Máximo de caracteres após hifenizar"
230 |
231 | #: conversion/output_config.py:171 device/koboextended_config.py:272
232 | msgid "Maximum consecutive hyphenated lines"
233 | msgstr "Máximo de linhas hifenizadas consecutivas"
234 |
235 | #: conversion/output_config.py:191 device/koboextended_config.py:289
236 | msgid "line"
237 | msgstr "linha"
238 |
239 | #: conversion/output_config.py:192 device/koboextended_config.py:290
240 | msgid "lines"
241 | msgstr "linhas"
242 |
243 | #: conversion/output_config.py:203
244 | msgid "Clean up ePub markup"
245 | msgstr "Limpar marcação do ePub"
246 |
247 | #: device/koboextended_config.py:66
248 | msgid "Extended"
249 | msgstr "Extendido"
250 |
251 | #: device/koboextended_config.py:111
252 | msgid "Extended driver"
253 | msgstr "Driver extendido"
254 |
255 | #: device/koboextended_config.py:119
256 | msgid "Enable Extended Kobo Features"
257 | msgstr "Habilitar funcionalidades extendidas Kobo"
258 |
259 | #: device/koboextended_config.py:120
260 | msgid "Choose whether to enable extra customizations"
261 | msgstr "Selecione para habilitar customizações extra"
262 |
263 | #: device/koboextended_config.py:125
264 | msgid "Upload DRM-encumbered ePub files"
265 | msgstr "Fazer upload de arquivos ePub com DRM"
266 |
267 | #: device/koboextended_config.py:127
268 | msgid ""
269 | "Select this to upload ePub files encumbered by DRM. If this is not selected,"
270 | " it is a fatal error to upload an encumbered file"
271 | msgstr ""
272 | "Selecione para enviar arquivos ePub protegidos por DRM. Se esta opção não "
273 | "estiver selecionada, enviar um arquivo protegido resultará em um erro fatal."
274 |
275 | #: device/koboextended_config.py:135
276 | msgid "Silently Ignore Failed Conversions"
277 | msgstr "Ignorar Silenciosamente Conversões Com Falha"
278 |
279 | #: device/koboextended_config.py:137
280 | msgid ""
281 | "Select this to not upload any book that fails conversion to kepub. If this "
282 | "is not selected, the upload process will be stopped at the first book that "
283 | "fails. If this is selected, failed books will be silently removed from the "
284 | "upload queue."
285 | msgstr ""
286 | "Selecione para não fazer upload de arquivos cuja conversão para KePub tenha "
287 | "falhado. Se essa opção não for selecionada, o processo de upload irá parar "
288 | "no primeiro livro que falhar. Se for selecionado, livros que falharem serão "
289 | "silenciosamente removidos da fila."
290 |
291 | #: device/koboextended_config.py:148
292 | msgid ""
293 | "Select this to add a CSS file which enables hyphenation. The language used "
294 | "will be the language defined for the book in calibre. Please see the README "
295 | "file for directions on updating hyphenation dictionaries."
296 | msgstr ""
297 | "Selecione para adicionar um arquivo CSS que permita hifenização. O idioma "
298 | "usado será o idioma definido para o livro no calibre. Por favor consulte o "
299 | "README para instruções sobre atualizar dicionários com hifenização."
300 |
301 | #: device/koboextended_config.py:157
302 | msgid "Smarten Punctuation"
303 | msgstr "Pontuação mais inteligente"
304 |
305 | #: device/koboextended_config.py:158
306 | msgid "Select this to smarten punctuation in the ePub"
307 | msgstr "Selecione para deixar a pontuação mais inteligente no ePub"
308 |
309 | #: device/koboextended_config.py:163
310 | msgid "Clean up ePub Markup"
311 | msgstr "Limpar marcação do ePub"
312 |
313 | #: device/koboextended_config.py:169 device/koboextended_config.py:177
314 | msgid "Copy generated KePub files to a directory"
315 | msgstr "Copiar arquivos KePub gerados para uma pasta"
316 |
317 | #: device/koboextended_config.py:171 device/koboextended_config.py:182
318 | msgid ""
319 | "Enter an absolute directory path to copy all generated KePub files into for "
320 | "debugging purposes."
321 | msgstr ""
322 | "Insira um caminho de pasta absoluto para copiar todos os arquivos gerados "
323 | "KePub para efeitos de depuração."
324 |
325 | #: device/koboextended_config.py:190
326 | msgid "Use full book page numbers"
327 | msgstr "Utilizar números de página absolutos do livro todo."
328 |
329 | #: device/koboextended_config.py:192
330 | msgid ""
331 | "Select this to show page numbers for the whole book, instead of each "
332 | "chapter. This will also affect regular ePub page number display!"
333 | msgstr ""
334 | "Selecione para exibir números de página para o livro completo, ao invés de "
335 | "cada capítulo. Isso também afetará a exibição do número de página regular do"
336 | " ePub!"
337 |
338 | #: device/koboextended_config.py:201
339 | msgid "Select this to disable hyphenation for books."
340 | msgstr "Selecione para desabilitar hifenização para livros"
341 |
342 | #: device/driver.py:56
343 | #, python-brace-format
344 | msgid ""
345 | "Failed to parse '{book}' by '{author}' with error: '{error}' (file: "
346 | "{filename}, line: {lineno})"
347 | msgstr ""
348 | "Falha ao analisar '{book} por {author}' com erro: '{error}' (arquivo: "
349 | "{filename}, linha: {lineno})"
350 |
351 | #: device/driver.py:79
352 | msgid ""
353 | "Communicate with Kobo Touch and later firmwares to enable extended Kobo ePub"
354 | " features."
355 | msgstr ""
356 | "Comunique com Kobo Touch e firmwares mais recentes para habilitar "
357 | "funcionalidades Kobo ePub extendidas."
358 |
359 | #: metadata/reader.py:25
360 | msgid "Read metadata from Kobo KePub files"
361 | msgstr "Visualizar metadados dos arquivos Kobo KePub "
362 |
363 | #: metadata/writer.py:36
364 | msgid "Set metadata in Kobo KePub files"
365 | msgstr "Configurar metadados nos arquivos Kobo KePub "
366 |
--------------------------------------------------------------------------------