calibre - en to tr translation catalogue (79 entries)

en: Writing your own plugins to extend calibre's functionality
tr: Calibre'nin işlevselliğini artırmak için kendi eklentilerinizi yazmak

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`.
tr: calibre oldukça modüler bir tasarıma sahiptir. Calibre'deki hemen hemen tüm işlevler eklentiler biçiminde gelir. Eklentiler dönüşüm için, haber indirmek için (bunlara tarif denir), kullanıcı arayüzünün çeşitli bileşenleri için, farklı cihazlara bağlanmak için, dosyaları calibre'ye eklerken işlemek için kullanılır. :guilabel:`Tercihler->Gelişmiş->Eklentiler`'e giderek calibre'deki tüm yerleşik eklentilerin tam listesini alabilirsiniz.

en: Here, we will teach you how to create your own plugins to add new features to calibre.
tr: Burda, calibre'ye yeni işlevler kazandırmak için kendi eklentilerinizi nasıl oluşturacağınızı öğreteceğiz.

en: Contents
tr: İçindekiler

en: This only applies to calibre releases >= 0.8.60
tr: Bu yalnızca >= 0.8.60 calibre sürümleri ile mümkündür

en: Anatomy of a calibre plugin
tr: Bir calibre eklentisinin anatomisi

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.
tr: Calibre eklentisi çok basittir, sadece bazı Python kodlarını ve eklentinin ihtiyaç duyduğu görüntü dosyaları gibi diğer kaynakları içeren bir ZIP dosyasıdır. Lafı fazla uzatmadan basit bir örneğe bakalım.

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:
tr: Çeşitli e-belgeleri EPUB ve MOBI biçimlerinde dağıtmak için kullandığınız bir calibre kurulumunuz olduğunu varsayın. Calibre tarafından üretilen tüm dosyaların yayıncısının "Merhaba dünya" olmasını istersiniz, bunu şu şekilde yapabilirsiniz. :file:`__init__.py` isimli bir dosya oluşturun (bu özel bir isimdir ve eklentinizin ana dosyası için her zaman kullanılmak zorundadır) ve aşağıdaki Python kodunu girin:

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`::
tr: Bu kadar. Bu kodu calibre'ye eklenti olarak eklemek için, oluşturduğunuz klasörde aşağıdakini çalıştırmanız yeterlidir :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/`.
tr: MacOS'ta komut satırı araçları calibre paketinin içindedir; örneğin, calibre'yi :file:`/Applications` dizinine yüklediyseniz komut satırı araçları :file:`/Applications/calibre.app/Contents/MacOS/` konumundadır .

en: You can download the Hello World plugin from :download_file:`helloworld_plugin.zip`.
tr: Merhaba Dünya eklentisini :download_file:`helloworld_plugin.zip` adresinden indirebilirsiniz.

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.
tr: Calibre kullanarak her bir kitap dönüştürme işlemi yaptığınızda, eklentinin :meth:`run` metodu çağrılacak ve dönüştürülen kitabın yayımcısı olarak "Merhaba Dünya" ayarlanacak. Bu önemsiz bir eklenti, daha karmaşık ve kullanıcı arayüzüne bir şeyler ekleyen bir tanesine geçelim.

en: A User Interface plugin
tr: Kullanıcı Arayüzü eklentisi

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.
tr: Bu eklenti birkaç dosyaya yayılacaktır (kodu temiz tutmak için). Eklenti ZIP dosyasından kaynakları (görüntüler veya veri dosyaları) nasıl alacağınızı, kullanıcıların eklentinizi yapılandırmasına olanak tanıyacağını, calibre kullanıcı arayüzünde nasıl öğeler oluşturacağınızı ve calibre'de kitap veritabanına nasıl erişip sorgulayacağınızı size gösterecektir.

en: You can download this plugin from :download_file:`interface_demo_plugin.zip`
tr: Bu eklentiyi :download_file:`interface_demo_plugin.zip` adresinden indirebilirsiniz.

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``.
tr: Unutulmaması gereken ilk şey, bu ZIP dosyasının içinde çok daha fazla dosya bulunmasıdır, aşağıda açıklandığı gibi, ``eklenti-içe aktarma-adı-arabirimi_demo.txt``ye özellikle dikkat edin.

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::
tr: Çoklu dosya eklentisi büyüsünü etkinleştirmek için kullanılan boş bir metin dosyası. Bu dosya, birden fazla .py dosyası kullanan tüm eklentilerde bulunmalıdır. Boş olmalı ve dosya adı şu biçimde olmalıdır: ``eklenti-içe aktarma-adı-**bir_adı**.txt``. Bu dosyanın varlığı, aşağıdaki gibi bir ifade kullanarak ZIP dosyasında bulunan .py dosyalarından kod içe aktarmanıza olanak tanır::

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".
tr: ``calibre_plugins`` öneki her zaman mevcut olmalıdır. ``bir_ad`` boş metin dosyasının dosya adından gelir. ``some_module``, ZIP dosyasındaki :file:`some_module.py` dosyasını ifade eder. Bu içe aktarmanın normal Python içe aktarmaları kadar güçlü olduğunu unutmayın. Tıpkı normalde yaptığınız gibi (her alt klasörde __init__.py tanımlayarak) ZIP dosyası içinde .py modüllerinin paketlerini ve alt paketlerini oluşturabilirsiniz ve her şey "çalışır".

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).
tr: ``bir_ad`` için kullandığınız ad, tüm eklentiler tarafından paylaşılan genel bir ad alanına girer, **bu yüzden onu mümkün olduğunca benzersiz yapın**. Ancak bunun geçerli bir Python tanımlayıcısı olması gerektiğini unutmayın (yalnızca harfler, sayılar ve alt çizgi).

en: As before, the file that defines the plugin class
tr: Daha önce olduğu gibi, eklenti sınıfını belirleyen dosya

en: This file contains the actual code that does something useful
tr: Bu dosya işe yarar bir şeyler yapan gerçek kodu içerir

en: This file defines the interface part of the plugin
tr: Bu dosya eklentinin arayüz kısmını tanımlar

en: The icon for this plugin
tr: Eklenti için simge

en: A text file with information about the plugin
tr: Eklenti hakkında bilgi veren bir metin dosyası

en: A folder containing .mo files with the translations of the user interface of your plugin into different languages. See below for details.
tr: Eklentinizin değişik dillere çevirilerini içeren .mo dosyalarını içeren bir dizin. Detaylar için aşağıya bakın.

en: Now let's look at the code.
tr: Şimdi koda bakalım.

en: First, the obligatory ``__init__.py`` to define the plugin metadata:
tr: Önce, eklenti metadatasını tanımlamak için zorunlu ``__init__.py``:

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.
tr: Dikkate değer tek özellik :attr:`actual_plugin` alanıdır. Calibre'de hem komut satırı hem de GUI arayüzleri olduğundan, bunun gibi GUI eklentileri __init__.py dosyasına herhangi bir GUI kütüphanesi yüklememelidir. real_plugin alanı bunu sizin için calibre'ye gerçek eklentinin ZIP arşivinizdeki başka bir dosyada bulunacağını söyleyerek yapar ve bu dosya yalnızca GUI bağlamına yüklenir.

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.
tr: Bunun çalışması için yukarıda tartışıldığı gibi eklenti ZIP dosyanızda bir eklenti-içe aktarma adı-bir_adı.txt dosyanızın olması gerektiğini unutmayın.

en: Also there are a couple of methods for enabling user configuration of the plugin. These are discussed below.
tr: Ayrıca eklentinin kullanıcı yapılandırmasının etkinleştirilmesi için bir kaç metod bulunmaktadır. Bunlardan aşağıda söz edilmektedir.

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:
tr: Şimdi asıl GUI eklentisini tanımlayan ui.py ye bakalım. Kaynak kod yoğun şekilde yorumlanmıştır, kendini açıklıyor olması lazım:

en: The actual logic to implement the Interface Plugin Demo dialog.
tr: Arayüz Eklenti Tanıtım iletişim penceresini uygulayan asıl mantıksal kısım.

en: Getting resources from the plugin ZIP file
tr: Eklenti ZIP dosyasından kaynak alma

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.
tr: calibre'nin eklenti yükleme sistemi, eklenti ZIP dosyasından dosyaları kolayca almanızı sağlayan birkaç yerleşik işlevi tanımlar.

en: **get_resources(name_or_list_of_names)**
tr: **get_resources(isim_veya_isim_listesi)**

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.
tr: Bu işlev, ZIP dosyası içindeki dosyaların yollarının listesiyle çağrılmalıdır. Örneğin, ZIP dosyasındaki resimler klasöründeki :file:`icon.png` dosyasına erişmek için şunu kullanırsınız: ``images/icon.png``. Windows'ta bile her zaman yol ayırıcı olarak eğik çizgi kullanın. Tek bir ad girdiğinizde, işlev o dosyanın ham baytlarını döndürür veya ad ZIP dosyasında bulunamadıysa Yok'u döndürür. Birden fazla ad girerseniz, adları baytlarla eşleştiren bir sözlük döndürür. Bir ad bulunamazsa, döndürülen sözlükte mevcut olmayacaktır.

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.
tr: get_resources() tarafından döndürülen ham baytlardan QIcon nesneleri oluşturan get_resources() sarmalayıcısı. ZIP dosyasında bir ad bulunamazsa ilgili QIcon boş olacaktır. Simge temasını desteklemek için eklentinizin insan dostu adını ``eklenti_adı`` olarak girin. Kullanıcı, eklentiniz için simgeler içeren bir simge teması kullanıyorsa, bunlar tercihen yüklenecektir.

en: Enabling user configuration of your plugin
tr: Eklentiniz için kullanıcı yapılandırmasını etkinleştirmek

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:
tr: Kullanıcıların eklentinizi yapılandırmasına izin vermek için, temel eklenti sınıfınızda aşağıda gösterildiği gibi **is_customizable**, **config_widget** ve **save_settings** olmak üzere üç yöntem tanımlamanız gerekir:

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.
tr: calibre'nin yapılandırma verisi saklamak için bir çok yöntemi vardır (uzun geçmişinden miras). Önerilen metod **JSONConfig** sınıfının kullanılmasıdır, bu da yapılandırmanızı bir .json dosyasında tutar.

en: The code to manage configuration data in the demo plugin is in config.py:
tr: Tanıtım eklentisindeki yapılandırma verisini yöneten kod config.py'de:

en: The ``prefs`` object is now available throughout the plugin code by a simple::
tr: ``prefs`` nesnesi şimdi eklenti kodunda basitçe şu şekilde kullanılabilir::

en: You can see the ``prefs`` object being used in main.py:
tr: ``prefs`` nesnesinin main.py'de kullanıldığını görebilirsiniz:

en: Edit book plugins
tr: Kitap eklentilerini düzenle

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`.
tr: Şimdi biraz vites değiştirelim ve calibre kitap düzenleyicisine araçlar eklemek için bir eklenti oluşturmaya bakalım. Eklentiyi burada bulabilirsiniz: :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``.
tr: İlk adım, :ref:`above <import_name_txt>` de açıklandığı gibi tüm eklentiler için boş bir içe aktarma ismi dosyası oluşturmaktır. Eklentiyi ``plugin-import-name-editor_plugin_demo.txt`` olarak adlandıralım.

en: Now we create the mandatory ``__init__.py`` file that contains metadata about the plugin -- its name, author, version, etc.
tr: Şimdi eklenti metadatasını içeren -- ismi, yazarı, sürümü vs. zorunlu ``__init__.py`` dosyasını oluşturuyoruz.

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.
tr: Tek bir düzenleyici eklenti her biri araç çubuğunda bir simgeye ve düzenleyicide :guilabel:`Eklentiler` menüsünde bir girdiye denk gelmek üzere bir çok araç sağlayabilir. Aracın birden çok eylemi  bulunması durumunda alt menüleri de olabilir.

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.
tr: Araçların her biri eklentinizdeki ``main.py`` içinde tanımlanmalıdır. Her araç :class:`calibre.gui2.tweak_book.plugin.Tool` sınıfından türetilen bir sınıftır. Tanıtım eklentisindeki ``main.py`` ye bakalım, kaynak kod yoğun olarak yorumlanmış ve kendini anlatabiliyor durumdadır. Daha fazla detay için :class:`calibre.gui2.tweak_book.plugin.Tool` sınıfının API belgelerini okuyun.

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.
tr: Burda kitaptaki tüm yazı tipi boyutlarını kullanıcı tarafından sağlanan bir numarayla çarpan tek bir araç tanımı göreceğiz. Bu araç kendi eklentilerinizi geliştirirken ihtiyaç duyacağınız çeşitli önemli kavramı gösterir, yani (yoğun bir şekilde yorumlanmış) kaynak kodu dikkatli okumalısınız.

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.
tr: ``main.py`` yi kısımlara ayıralım. *Magnify fonts* adında tek bir araç tanımladığını görüyoruz. Bu araç kullanıcıya bir sayı soracak ve kitaptaki tüm yazı tipi boyutlarını bu sayıyla çarpacak.

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.
tr: İlk önemli nokta, bu araç için anahtar olarak kullanılacağından benzersiz bir karakter dizisi olarak ayarlayacağınız araç ismidir.

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.
tr: Sonraki önemli nokta da :meth:`calibre.gui2.tweak_book.plugin.Tool.create_action`. Bu metod eklenti araç çubuğu ve eklenti menüsünde görünen QAction nesnelerini oluşturur. Bunun yanında, isteğe bağlı olarak kullanıcının özelleştirebileceği bir klavye kısayolu atar. QAction tarafından tetiklenen sinyal kullanıcıya yazı tipi boyutu çarpanını soran ask_user() metoduna bağlıdır, bu da çarpma kodunu çalıştırır.

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.
tr: Çarpma kodu iyi belgelenmiş ve oldukça basittir. Dikkate alınacan temel şeyler düzenleyici pencereye ``self.gui`` ile, düzenleyici *Boss* una ``self.boss`` ile bir referans aldığınızdır. *Boss* düzenleyici kullanıcı arayüzünü kontrol eden nesnedir. :class:`calibre.gui2.tweak_book.boss.Boss` sınıfında belgelenmiş bir çok faydalı metodu vardır.

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`.
tr: Son olarak :class:`calibre.ebooks.oeb.polish.container.Container` nesnesi olan düzenlenen kitaba referans olan ``self.current_container`` bulunmaktadır. Bu, kitabı, kitabı oluşturan HTML/CSS/resim dosyaları koleksiyonu olarak temsil eder ve daha bir çok faydalı iş yapan metodu vardır. Eklenti kodunuzda tekrar kullanabileceğiniz bir çok kullanışlı fonksiyon ve kapsayıcı nesne :ref:`polish_api` içinde belgelenmiştir.

en: Adding translations to your plugin
tr: Eklentinize çeviriler eklemek

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.
tr: Eklentinizdeki tüm kullanıcı arayüzü karakter dizilerini ana calibre kullanıcı arayüzü için hangi dil seçildiyse o dile çevirip gösterebilirsiniz.

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::
tr: İlk adım eklentinizin kaynak kodunun üstünden geçmek ve kullanıcıya görünür tüm metinleri _() içerisine alarak çevrilebilir olarak işaretlemektir. Örneğin::

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.
tr: Daha sonra eklenti kaynak kodunuzdan .po dosyaları oluşturmak için bir program kullanın. Çevirmek istediğiniz her dil için bir .po dosyası bulunmalıdır. Örneğin: Almanca için de.po, Fransızca için fr.po vb. Bunun için `Poedit <https://poedit.net/>`_ programını kullanabilirsiniz.

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::
tr: Bu .po dosyalarını çevirmenlerinize gönderin. Bunları geri aldıktan sonra .mo dosyaları halinde derleyin. Bunun için tekrar Poedit'i kullanabilir veya şunu yapabilirsiniz::

en: Put the .mo files into the ``translations`` folder in your plugin.
tr: .mo dosyalarını eklentinizdeki ``translations`` dizinine koyun.

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``.
tr: Son adım eklentinizin .py dosyalarının başına `load_translations()` fonksiyonunu eklemektir. Performans açısından bu fonksiyonu yalnızca çevrilebilir karakter dizilerinin olduğu dosyalara eklemelisiniz. Yani tipik bir kullanıcı arayüzü eklentisinde ``ui.py`` başında çağırırken ``__init__.py``de çağırmazsınız.

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::
tr: Eklentilerinizin çevirilerini calibre'de :guilabel:`Tercihler->Arayüz->Görünüm ve his` altında kullanıcı arayüzü dilini değiştirerek veya calibre'yi ``CALIBRE_OVERRIDE_LANG`` ortam değişken seti ile çalıştırarak test edebilirsiniz. Örneğin::

en: Replace ``de`` with the language code of the language you want to test.
tr: ``de`` yi test etmek istediğiniz dil koduyla değiştirin.

en: For translations with plurals, use the ``ngettext()`` function instead of ``_()``. For example::
tr: Çoğul içeren çeviriler için ``_()`` yerine ``ngettext()`` işlevini kullanın. Örneğin::

en: The plugin API
tr: Eklenti API'si

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`.
tr: Yukarda fark etmiş olabileceğiniz gibi, calibre'de eklenti bir sınıftır. Calibre'de değişik türde eklentiler için değişik sınıflar bulunur. Tüm eklentiler için temel sınıf dahil her sınıfla ilgili detay :ref:`plugins` içinde bulunabilir.

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`.
tr: Eklentiniz çoğu durumda calibre'den de kod kullanacaktır. calibre kod tabanındaki fonksiyonellikle ilgili çeşitli bilgiler bulmak için, calibre'deki :ref:`code_layout` kısmını okuyun.

en: Debugging plugins
tr: Eklentilerde hata ayıklama

en: The first, most important step is to run calibre in debug mode. You can do this from the command line with::
tr: İlk, en önemli adım calibre'yi hata ayıklama kipinde çalıştırmaktır. Bu işlemi komut satırından şu şekilde yapabilirsiniz::

en: Or from within calibre by right-clicking the :guilabel:`Preferences` button or using the :kbd:`Ctrl+Shift+R` keyboard shortcut.
tr: Veya calibre içinden :guilabel:`Tercihler` düğmesine sağ tıklayarak veya :kbd:`Ctrl+Shift+R` klavye kısayolunu kullanarak.

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.
tr: Komut satırından çalıştırırken, hata ayıklama çıktısı konsola yazdırılacaktır, calibre içinden çalıştırılırken çıktı bir txt dosyasına gider.

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.
tr: Yazdırma ifadelerini eklenti kodunuzun herhangi bir yerine ekleyebilirsiniz, bunlar hata ayıklama modunda yayınlanacaktır. Unutmayın, bu Python, hata ayıklamak için print ifadelerinden daha fazlasına ihtiyacınız olmamalı ;) Calibre'nin tamamını sadece bu hata ayıklama tekniğini kullanarak geliştirdim.

en: You can quickly test changes to your plugin by using the following command line::
tr: Eklentinize yaptığınızı değişiklikleri hızlıca şu komut satırıyla test edebilirsiniz::

en: This will shutdown a running calibre, wait for the shutdown to complete, then update your plugin in calibre and relaunch calibre.
tr: Bu işlem calibre'yi kapatır, kapanmanın bitmesini bekler, eklentinizi calibre'de günceller ve calibre'yi baştan başlatır.

en: More plugin examples
tr: Daha fazla eklenti örneği

en: You can find a list of many sophisticated calibre plugins `here <https://www.mobileread.com/forums/showthread.php?t=118764>`_.
tr: Birçok gelişmiş Calibre eklentisinin listesini burada <https://www.mobileread.com/forums/showthread.php?t=118764>`_ bulabilirsiniz.

en: Sharing your plugins with others
tr: Eklentilerinizi başkalarıyla paylaşmak

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>`_.
tr: Oluşturduğunuz eklentileri diğer calibre kullanıcılarıyla paylaşmak istiyorsanız, eklentinizi 'calibre eklentileri forumunda <https://www.mobileread.com/forums/forumdisplay.php?f=237 yeni bir başlıkta yayınlayın. >`_.
