calibre - en to sv translation catalogue (80 entries)

en: Writing your own plugins to extend calibre's functionality
sv: Skriv dina egna insticksmoduler för att utöka calibres funktionalitet

en: calibre has a very modular design. Almost all functionality in calibre comes in the form of plugins. Plugins are used for conversion, for downloading news (though these are called recipes), for various components of the user interface, to connect to different devices, to process files when adding them to calibre and so on. You can get a complete list of all the built-in plugins in calibre by going to :guilabel:`Preferences->Advanced->Plugins`.
sv: calibre är en väldigt modulär konstruktion. Nästan alla funktioner i calibre kommer i form av insticksmoduler. Insticksmoduler används för konvertering, för hämtning av nyheter (även om dessa kallas för recept), för diverse komponenter av användargränssnitt, för anslutning av olika enheter, för bearbetning av filer när de läggs till calibre och så vidare. Du kan få en komplett lista med alla inbyggda insticksmoduler i calibre genom att gå till :guilabel:`Inställningar->Avancerat->Insticksmoduler`.

en: Here, we will teach you how to create your own plugins to add new features to calibre.
sv: Här kommer vi att lära dig att skapa dina egna insticksmoduler för att lägga till nya funktioner i calibre.

en: Contents
sv: Innehåll

en: This only applies to calibre releases >= 0.8.60
sv: Detta gäller bara calibre-utgåvor >= 0.8.60

en: Anatomy of a calibre plugin
sv: Anatomi av en calibre-insticksmodul

en: A calibre plugin is very simple, it's just a ZIP file that contains some Python code and any other resources like image files needed by the plugin. Without further ado, let's see a basic example.
sv: En calibre-insticksmodul är väldigt enkel, det är bara en ZIP-fil som innehåller lite Python-kod och andra resurser som bildfiler som behövs av insticksmodulen. Utan vidare, låt oss se ett grundläggande exempel.

en: Suppose you have an installation of calibre that you are using to self publish various e-documents in EPUB and MOBI formats. You would like all files generated by calibre to have their publisher set as "Hello world", here's how to do it. Create a file named :file:`__init__.py` (this is a special name and must always be used for the main file of your plugin) and enter the following Python code into it:
sv: Anta att du har en installation av calibre som du använder för att själv publicera olika e-dokument i EPUB- och MOBI-format. Du vill att alla filer som genereras av calibre har förläggaren inställd som "Hej världen", här är hur man gör det. Skapa en fil med namnet :file:`__init __ py` (detta är ett speciellt namn och ska alltid användas för huvudfilen för din insticksmodul) och ange följande Python-kod i den:

en: That's all. To add this code to calibre as a plugin, simply run the following in the folder in which you created :file:`__init__.py`::
sv: Det är allt. För att lägga till den här koden i calibre som en insticksmodul, kör helt enkelt följande i mappen där du skapade :file:`__init__.py`::

en: On macOS, the command line tools are inside the calibre bundle, for example, if you installed calibre in :file:`/Applications` the command line tools are in :file:`/Applications/calibre.app/Contents/MacOS/`.
sv: I macOS finns kommandoradsverktygen inuti calibre paketet, till exempel om du installerade calibre i :file:`/Applications` kommandoradsverktygen finns i :file:`/Applications/calibre.app/Contents/MacOS/`.

en: You can download the Hello World plugin from :download_file:`helloworld_plugin.zip`.
sv: Du kan hämta insticksmodulen Hello World från :download_file:`helloworld_plugin.zip`.

en: Every time you use calibre to convert a book, the plugin's :meth:`run` method will be called and the converted book will have its publisher set to "Hello World". This is a trivial plugin, lets move on to a more complex example that actually adds a component to the user interface.
sv: Varje gång du använder calibre att konvertera en bok, kommer insticksmodulens :meth:`run` metod att anropas och den konverterade boken kommer att ha sin förläggare satt till "Hello World". Denna är en trivial insticksmodul, låt oss gå vidare till ett mer komplext exempel som faktiskt lägger till en komponent till användargränssnittet.

en: A User Interface plugin
sv: En användargränssnitts insticksmodul

en: This plugin will be spread over a few files (to keep the code clean). It will show you how to get resources (images or data files) from the plugin ZIP file, allow users to configure your plugin, how to create elements in the calibre user interface and how to access and query the books database in calibre.
sv: Denna insticksmodul kommer att spridas över några filer (för att hålla koden ren). Den kommer att visa dig hur du får resurser (bilder eller datafiler) från insticksmodulens ZIP-fil, tillåter användare att anpassa din insticksmodul, hur man skapar element i calibre-användargränssnittet och hur man får åtkomst till och söker i bokdatabasen i calibre.

en: You can download this plugin from :download_file:`interface_demo_plugin.zip`
sv: Du kan hämta denna insticksmodul från :download_file:`interface_demo_plugin.zip`

en: The first thing to note is that this ZIP file has a lot more files in it, explained below, pay particular attention to ``plugin-import-name-interface_demo.txt``.
sv: Det första att observera är att denna ZIP-filen har många fler filer i sig, som förklaras nedan, ta särskild hänsyn till ``plugin-import-name-interface_demo.txt``.

en: An empty text file used to enable the multi-file plugin magic. This file must be present in all plugins that use more than one .py file. It should be empty and its filename must be of the form: ``plugin-import-name-**some_name**.txt``. The presence of this file allows you to import code from the .py files present inside the ZIP file, using a statement like::
sv: En tom textfil som används för att aktivera insticksmodulsmagin för flera filer. Den här filen måste finnas i alla insticksmoduler som använder mer än en .py-fil. Den ska vara tom och filnamnet måste ha formen: ``plugin-import-name-**some_name**.txt``. Förekomsten av den här filen låter dig importera kod från .py-filerna som finns i ZIP-filen med en sats som::

en: The prefix ``calibre_plugins`` must always be present. ``some_name`` comes from the filename of the empty text file. ``some_module`` refers to  :file:`some_module.py` file inside the ZIP file. Note that this importing is just as powerful as regular Python imports. You can create packages and subpackages of .py modules inside the ZIP file, just like you would normally (by defining __init__.py in each sub-folder), and everything should "just work".
sv: Prefixet ``calibre_plugins`` måste alltid vara närvarande. ``some_name`` kommer från filnamnet på den tomma textfilen. ``some_module`` avser :file:`some_module.py` fil inuti ZIP-filen. Observera att denna import är lika kraftfull som vanlig Python importering. Du kan skapa paket och underpaket för .py moduler inuti ZIP filen, precis som du normalt skulle (genom att definiera __init__.py i varje undermapp), och allt ska bara fungera.

en: The name you use for ``some_name`` enters a global namespace shared by all plugins, **so make it as unique as possible**. But remember that it must be a valid Python identifier (only alphabets, numbers and the underscore).
sv: Namnet du använda för ``some_name`` går in i en globala namnrymden delas av alla insticksmodul, **så gör det så unikt som möjligt**. Men kom ihåg att det måste vara en giltigt Python-identifierare (endast alfabet, siffror och understreck).

en: As before, the file that defines the plugin class
sv: Som tidigare, filen som definierar insticksmodulsklassen

en: This file contains the actual code that does something useful
sv: Den här filen innehåller den faktiska koden som gör något användbart

en: This file defines the interface part of the plugin
sv: Denna fil definierar gränssnittsdelen av insticksmodulen

en: **images/icon.png**
sv: **bilder/ikon.png**

en: The icon for this plugin
sv: Ikonen för denna insticksmodul

en: A text file with information about the plugin
sv: En textfil med information om insticksmodulen

en: **translations**
sv: **översättningar**

en: A folder containing .mo files with the translations of the user interface of your plugin into different languages. See below for details.
sv: En mapp innehåller .mo-filer med översättningar av användargränssnittet av din insticksmodul till olika språk. Se nedan för detaljer.

en: Now let's look at the code.
sv: Låt oss nu titta på koden.

en: First, the obligatory ``__init__.py`` to define the plugin metadata:
sv: Först det obligatoriska ``__init__.py`` för att definiera insticksmodulens metadata:

en: The only noteworthy feature is the field :attr:`actual_plugin`. Since calibre has both command line and GUI interfaces, GUI plugins like this one should not load any GUI libraries in __init__.py. The actual_plugin field does this for you, by telling calibre that the actual plugin is to be found in another file inside your ZIP archive, which will only be loaded in a GUI context.
sv: Det enda anmärkningsvärda funktionen är fältet :attr:`actual_plugin`. Eftersom calibre har både kommandorad och användargränssnitt bör användargränssnittsinsticksmoduler som denna inte läsa in några biblioteksanvändargränssnitt i __init__.py. Fältet actual_plugin gör detta åt dig, genom att berätta för calibre att den egentliga insticksmodulen finns i en annan fil i ditt ZIP-arkiv, som endast kommer att läsas in i ett användargränssnittssammanhang.

en: Remember that for this to work, you must have a plugin-import-name-some_name.txt file in your plugin ZIP file, as discussed above.
sv: Kom ihåg att för att detta ska fungera måste du ha en plugin-import-name-some_name.txt fil i din insticksmoduls ZIP-fil, som diskuterats ovan.

en: Also there are a couple of methods for enabling user configuration of the plugin. These are discussed below.
sv: Också finns det ett par olika metoder för att möjliggöra användarkonfiguration av insticksmodulen. Dessa diskuteras nedan.

en: Now let's look at ui.py which defines the actual GUI plugin. The source code is heavily commented and should be self explanatory:
sv: Låt oss nu titta på ui.py som definierar själva användargränssnitts insticksmodul. Källkoden är kraftigt kommenterade och bör vara självförklarande:

en: The actual logic to implement the Interface Plugin Demo dialog.
sv: Den faktiska logiken för att implementera dialogrutan insticksmodulsdemo för gränssnittet.

en: Getting resources from the plugin ZIP file
sv: Få resurser från insticksmodulens ZIP-fil

en: calibre's plugin loading system defines a couple of built-in functions that allow you to conveniently get files from the plugin ZIP file.
sv: calibres insticksmodulsladdningssystem definierar ett par inbyggda funktioner som gör att du bekvämt kan hämta filer från insticksmodulens ZIP-fil.

en: This function should be called with a list of paths to files inside the ZIP file. For example to access the file :file:`icon.png` in the folder images in the ZIP file, you would use: ``images/icon.png``. Always use a forward slash as the path separator, even on Windows. When you pass in a single name, the function will return the raw bytes of that file or None if the name was not found in the ZIP file. If you pass in more than one name then it returns a dictionary mapping the names to bytes.  If a name is not found, it will not be present in the returned dictionary.
sv: Den här funktionen bör anropas med en lista av sökvägar till filer i ZIP-filen. Till exempel för att komma åt filen :file:`icon.png` i mappbilderna i ZIP-filen, skulle du använda: ``images/icon.png``. Använd alltid ett framåt snedstreck som sökvägsavskiljare, även i Windows. När du anger ett enda namn kommer funktionen att returnera råa byte för filen eller None om namnet inte hittades i ZIP-filen. Om du anger mer än ett namn så returneras en ordbok som mappar namnen till byte.  Om ett namn inte hittas kommer det inte att finnas i den returnerade ordboken.

en: A wrapper for get_resources() that creates QIcon objects from the raw bytes returned by get_resources. If a name is not found in the ZIP file the corresponding QIcon will be null. In order to support icon theme-ing, pass in the human friendly name of your plugin as ``plugin_name``. If the user is using an icon theme with icons for your plugin, they will be loaded preferentially.
sv: En wrapper för get_resources() som skapar QIcon-objekt från de råbyte som returneras av get_resources. Om ett namn inte hittas i ZIP-filen kommer motsvarande QIcon att vara null. För att stödja ikontema, skicka in det människovänliga namnet på din insticksmodul som ``plugin_name``. Om användaren använder ett ikontema med ikoner för din insticksmodul, kommer de att läsas in med företräde.

en: Enabling user configuration of your plugin
sv: Aktivera användarkonfiguration för din insticksmodul

en: To allow users to configure your plugin, you must define three methods in your base plugin class, **is_customizable**, **config_widget** and **save_settings** as shown below:
sv: För att tillåta användare att anpassa din insticksmodul måste du definiera tre metoder i din bas insticksmodulsklass, **is_customizable**, **config_widget** och **save_settings** enligt nedan:

en: calibre has many different ways to store configuration data (a legacy of its long history). The recommended way is to use the **JSONConfig** class, which stores your configuration information in a .json file.
sv: calibre har många olika sätt att lagra konfigurationsdata (ett arv av sin långa historia). Det rekommenderade sättet är att använda **JSONConfig** klass, som lagrar din konfigurationsinformation i en .json-fil.

en: The code to manage configuration data in the demo plugin is in config.py:
sv: Koden för att hantera konfigurationsdata i demo-insticksmodulen finns i config.py:

en: The ``prefs`` object is now available throughout the plugin code by a simple::
sv: ``prefs``-objekt äret nu tillgängligt i hela insticksmodulskoden med en enkel::

en: You can see the ``prefs`` object being used in main.py:
sv: Du kan se ``prefs``-objekt som används i main.py:

en: Edit book plugins
sv: Redigera bokinsticksmodul

en: Now let's change gears for a bit and look at creating a plugin to add tools to the calibre book editor. The plugin is available here: :download_file:`editor_demo_plugin.zip`.
sv: Låt oss nu byta växel för ett tag och se hur man skapar en insticksmodul för att lägga till verktyg till calibres bokredigerare. Instickmodulen finns här: :download_file:`editor_demo_plugin.zip`.

en: The first step, as for all plugins is to create the import name empty txt file, as described :ref:`above <import_name_txt>`. We shall name the file ``plugin-import-name-editor_plugin_demo.txt``.
sv: Det första steget, som för alla insticksmodul är att skapa importnamnet tom TXT-fil, som beskrivs :ref:`ovan <import_name_txt>`. Vi ska namnge filen ``plugin-import-name-editor_plugin_demo.txt``.

en: Now we create the mandatory ``__init__.py`` file that contains metadata about the plugin -- its name, author, version, etc.
sv: Nu skapar vi den obligatoriska ``__init __ py`` filen som innehåller metadata om insticksmodulen -- dess namn, utvecklare, version etc.

en: A single editor plugin can provide multiple tools each tool corresponds to a single button in the toolbar and entry in the :guilabel:`Plugins` menu in the editor. These can have sub-menus in case the tool has multiple related actions.
sv: En enda insticksmodul redigerare kan ge flera verktyg varje verktyg motsvarar en knapp i verktygsfältet och posten i :guilabel:`Insticksmoduler`-menyn i redigeraren. Dessa kan ha undermenyer om verktyget har flera relaterade åtgärder.

en: The tools must all be defined in the file ``main.py`` in your plugin. Every tool is a class that inherits from the :class:`calibre.gui2.tweak_book.plugin.Tool` class. Let's look at ``main.py`` from the demo plugin, the source code is heavily commented and should be self-explanatory. Read the API documents of the :class:`calibre.gui2.tweak_book.plugin.Tool` class for more details.
sv: Verktygen bör definieras i filen ``main.py`` i din insticksmodul. Varje verktyg är en klass som ärvs från klassen :class:`calibre.gui2.tweak_book.plugin.Tool`. Låt oss titta på ``main.py`` från demo-insticksmodulen, källkoden är tungt kommenterade och bör vara självförklarande. Läs API-dokumenten av klassen :class:`calibre.gui2.tweak_book.plugin.Tool` för mer detaljer.

en: Here we will see the definition of a single tool that will multiply all font sizes in the book by a number provided by the user. This tool demonstrates various important concepts that you will need in developing your own plugins, so you should read the (heavily commented) source code carefully.
sv: Här kommer vi att se definitionen av ett enda verktyg som kommer att multiplicera alla teckensnittsstorlekar i boken av ett nummer som användaren ger. Detta verktyg visar olika viktiga begrepp som du behöver för att utveckla dina egna insticksmodul, så du bör läsa (tungt kommenterade) källkoden noggrant.

en: Let's break down ``main.py``. We see that it defines a single tool, named *Magnify fonts*. This tool will ask the user for a number and multiply all font sizes in the book by that number.
sv: Låt oss bryta ner ``main.py``. Vi ser att den definierar ett enda verktyg, som heter *Förstora teckensnitt*. Detta verktyg kommer att be användaren om ett nummer och multiplicera alla teckensnittsstorlekar i boken med det numret.

en: The first important thing is the tool name which you must set to some relatively unique string as it will be used as the key for this tool.
sv: Det första viktiga är verktygsnamnet som du måste ställa in till någon relativt unik sträng eftersom det kommer att användas som nyckel för detta verktyg.

en: The next important entry point is the :meth:`calibre.gui2.tweak_book.plugin.Tool.create_action`. This method creates the QAction objects that appear in the plugins toolbar and plugin menu. It also, optionally, assigns a keyboard shortcut that the user can customize. The triggered signal from the QAction is connected to the ask_user() method that asks the user for the font size multiplier, and then runs the magnification code.
sv: Nästa viktiga startpunkt är :meth:`calibre.gui2.tweak_book.plugin.Tool.create_action`. Denna metod skapar QAction-objekt som visas i insticksmodulsverktygsfältet och insticksmodulsmenyn. Den tilldelar också valfritt en tangentbordsgenväg som användaren kan skräddarsy. Den utlösta signalen från QAction är ansluten till  metoden ask_user() som frågar användaren om teckensnittsstorlekensmultiplikatorn och sedan kör förstoringskoden.

en: The magnification code is well commented and fairly simple. The main things to note are that you get a reference to the editor window as ``self.gui`` and the editor *Boss* as ``self.boss``. The *Boss* is the object that controls the editor user interface. It has many useful methods, that are documented in the :class:`calibre.gui2.tweak_book.boss.Boss` class.
sv: Förstoringskoden är väl kommenterad och ganska enkel. De viktigaste sakerna att observera är att du får en referens till redigeringsfönstret som ``self.gui`` och redigeraren *Boss* som ``self.boss``. *Boss* är objektet som styr redigerarens användargränssnitt. Den har många användbara metoder, som dokumenteras klassen i :class:`calibre.gui2.tweak_book.boss.Boss`.

en: Finally, there is ``self.current_container`` which is a reference to the book being edited as a :class:`calibre.ebooks.oeb.polish.container.Container` object. This represents the book as a collection of its constituent HTML/CSS/image files and has convenience methods for doing many useful things. The container object and various useful utility functions that can be reused in your plugin code are documented in :ref:`polish_api`.
sv: Slutligen finns det ``self.current_container`` som är en referens till boken som redigeras som :class:`calibre.ebooks.oeb.polish.container.Container` objekt. Detta representerar boken som en samling av sina konstituerande HTML/CSS/bildfiler och har bekvämliga metoder för att göra många användbara saker. Objektbehållaren och olika användbara nyttofunktioner som kan återanvändas i din insticksmodulskod är dokumenterade i :ref:`polish_api`.

en: Adding translations to your plugin
sv: Lägga till översättningar till din insticksmodul

en: You can have all the user interface strings in your plugin translated and displayed in whatever language is set for the main calibre user interface.
sv: Du kan ha alla användargränssnittsträngar i din insticksmodul översatta och visas på vilket språk som är inställt för huvudanvändargränssnittet i calibre.

en: The first step is to go through your plugin's source code and mark all user visible strings as translatable, by surrounding them in _(). For example::
sv: Det första steget är att gå igenom din insticksmoduls källkod och markera alla användarsynliga strängar som översättningsbara, genom att omge dem _(). Till exempel::

en: Then use some program to generate .po files from your plugin source code. There should be one .po file for every language you want to translate into. For example: de.po for German, fr.po for French and so on. You can use the `Poedit <https://poedit.net/>`_ program for this.
sv: Använd sedan något program för att skapa .po-filer från din insticksmodulskällkod. Det bör finnas en .po-fil för varje språk du vill översätta till. Till exempel: de.po för tyska, fr.po för franska och så vidare. Du kan använda programmet `Poedit <https://poedit.net/>`_ för detta.

en: Send these .po files to your translators. Once you get them back, compile them into .mo files. You can again use Poedit for that, or just do::
sv: Skicka dessa .po filer till dina översättare. När du får tillbaka dem, kompilera dem i .mo filer. Du kan återigen använda Poedit för det, eller bara göra::

en: Put the .mo files into the ``translations`` folder in your plugin.
sv: Placera .mo-filer i ``translations``-mappen i din insticksmodul.

en: The last step is to simply call the function `load_translations()` at the top of your plugin's .py files. For performance reasons you should only call this function in those .py files that actually have translatable strings. So in a typical User Interface plugin you would call it at the top of ``ui.py`` but not ``__init__.py``.
sv: Det sista steget är att helt enkelt anropa funktionen `load_translations()` överst av dina insticksmoduls .py-filer. Av prestandaskäl bör du bara anropa den här funktionen i de .py-filerna som faktiskt har översättningsbara strängar. Så i en typiskt användargränssnittsinsticksmodul skulle du anropa det överst i ``ui.py`` men inte ``__init __. py``.

en: You can test the translations of your plugins by changing the user interface language in calibre under :guilabel:`Preferences->Interface->Look & feel` or by running calibre with the ``CALIBRE_OVERRIDE_LANG`` environment variable set. For example::
sv: Du kan testa översättningarna av dina insticksmodul genom att ändra språk i användargränssnittet i calibre i :guilabel:`Inställningar->Gränssnitt->Utseende & känsla` eller genom att köra calibre med miljövariabeluppsättningen ``CALIBRE_OVERRIDE_LANG``. Till exempel::

en: Replace ``de`` with the language code of the language you want to test.
sv: Ersätt ``sv`` med språkkoden för det språk som du vill testa.

en: For translations with plurals, use the ``ngettext()`` function instead of ``_()``. For example::
sv: För översättningar med plural, använd funktionen ``ngettext()`` istället för ``_()``. Till exempel::

en: The plugin API
sv: Insticksmoduls API

en: As you may have noticed above, a plugin in calibre is a class. There are different classes for the different types of plugins in calibre. Details on each class, including the base class of all plugins can be found in :ref:`plugins`.
sv: Som ni kanske har märkt ovan, en insticksmodul i calibre är en klass. Det finns olika klasser för de olika typerna av insticksmoduler i calibre. Detaljer om varje klass, inklusive basklassen för alla insticksmoduler kan hittas i :ref:`plugins`.

en: Your plugin is almost certainly going to use code from calibre. To learn how to find various bits of functionality in the calibre code base, read the section on the calibre :ref:`code_layout`.
sv: Din insticksmodul kommer nästan säkert att använda kod från calibre. För att lära dig hur man hittar olika funktioner i calibre-kodbasen, läs avsnittet om calibre :ref:`code_layout`.

en: Debugging plugins
sv: Felsöka insticksmodul

en: The first, most important step is to run calibre in debug mode. You can do this from the command line with::
sv: Den första och viktigaste steget är att köra calibre i felsökningsläge. Du kan göra det från kommandoraden med::

en: Or from within calibre by right-clicking the :guilabel:`Preferences` button or using the :kbd:`Ctrl+Shift+R` keyboard shortcut.
sv: Eller inifrån calibre genom att högerklicka på :guilabel:`Inställningar` eller genom att använda tangentbordsgenvägen :kbd:`Ctrl+Skift+R`.

en: When running from the command line, debug output will be printed to the console, when running from within calibre the output will go to a txt file.
sv: När du kör från kommandoraden, kommer felsökningsutmatning skrivas till konsolen, när man kör inifrån calibre kommer utmatning gå till en TXT-fil.

en: You can insert print statements anywhere in your plugin code, they will be output in debug mode. Remember, this is Python, you really shouldn't need anything more than print statements to debug ;) I developed all of calibre using just this debugging technique.
sv: Du kan infoga utskriftssatser var som helst i din insticksmodulskod, de matas ut i felsökningsläge. Kom ihåg, det här är Python, du borde verkligen inte behöva mer än att skriva ut uttalanden för att felsöka ;) Jag utvecklade hela calibre med just den här felsökningstekniken.

en: You can quickly test changes to your plugin by using the following command line::
sv: Du kan snabbt testa ändringar i din insticksmodul med hjälp av följande kommandorad::

en: This will shutdown a running calibre, wait for the shutdown to complete, then update your plugin in calibre and relaunch calibre.
sv: Detta kommer att stänga en körande calibre, vänta på avstängning är slutförd och sedan uppdatera din insticksmodul i calibre och starta om calibre.

en: More plugin examples
sv: Fler insticksmodul exempel

en: You can find a list of many sophisticated calibre plugins `here <https://www.mobileread.com/forums/showthread.php?t=118764>`_.
sv: Du kan hitta en lista med många sofistikerade calibre-insticksmoduler `här <https://www.mobileread.com/forums/showthread.php?t=118764>`_.

en: Sharing your plugins with others
sv: Dela dina insticksmodul med andra

en: If you would like to share the plugins you have created with other users of calibre, post your plugin in a new thread in the `calibre plugins forum <https://www.mobileread.com/forums/forumdisplay.php?f=237>`_.
sv: Om du vill dela insticksmodulen som du har gjort med andra calibre-användare, posta din insticksmodul i en ny tråd i `calibre-insticksmodulsforumet <https://www.mobileread.com/forums/forumdisplay.php?f=237>`_.
