calibre - en to ja translation catalogue (159 entries)

en: The calibre template language
ja: calibre テンプレート言語

en: The calibre template language is a calibre-specific language used throughout calibre for tasks such as specifying file paths, formatting values, and computing the value for user-specified columns. Examples:
ja: calibre テンプレート言語は、ファイルパスの指定、値の整形、ユーザ指定の列の値の計算などのタスクのために calibre 全体で使用される calibre 固有の言語です。例を挙げると:

en: Specify the folder structure and file names when saving files from the calibre library to the disk or e-book reader.
ja: calibre ライブラリからディスクまたは電子書籍リーダにファイルを保存するときに、フォルダ構造とファイル名を指定します。

en: Define rules for adding icons and colors to the calibre book list.
ja: calibre の本のリストにアイコンと色を追加するためのルールを定義します。

en: Define `virtual columns` that contain data from other columns.
ja: 他の列からのデータを含む `仮想列` を定義します。

en: Advanced library searching.
ja: 高度なライブラリ検索。

en: Advanced metadata search and replace.
ja: 高度なメタデータの検索と置換。

en: The language is built around the notion of a `template`, which specifies which book metadata to use, computations on that metadata, and how it is to be formatted.
ja: この言語は、使用する本の書誌、その書誌の計算、およびそのフォーマット方法を指定する `テンプレート` の概念に基づいて構築されています。

en: Basic templates
ja: 基本テンプレート

en: A basic template consists one or more ``template expressions``. A ``template expression`` consists of text and names in curly brackets (``{}``) that is replaced by the corresponding metadata from the book being processed. For example, the default template in calibre used for saving books to device has 4 ``template expressions``::
ja: 基本テンプレートは、ひとつ以上の ``テンプレート表現`` で構成されます。``テンプレート表現`` は、中括弧 (``{}``) 内のテキストと名前で構成され、処理中の本の対応する書誌に置き換えられます。たとえば、本をデバイスに保存するために使用される calibre のデフォルトのテンプレートには、次の 4 つのテンプレート式があります。

en: For the book "The Foundation" by "Isaac Asimov" the  will become::
ja: "Isaac Asimov" の本 "The Foundation" の場合、次のようになります::

en: then for "The Foundation" the template produces::
ja: "The Foundation" にテンプレートは次を生成します::

en: A ``template expression`` can access all the metadata available in calibre, including custom columns (columns you create yourself), by using a column's ``lookup name``. To find the lookup name for a `column` (sometimes called `fields`), hover your mouse over the column header in calibre's book list. Lookup names for custom columns always begin with ``#``. For series type columns there is an additional field named ``#lookup name_index`` that is the series index for that book in the series. For example, if you have a custom series column named ``#myseries``, there will also be a column named ``#myseries_index``. The standard series column's index is named ``series_index``.
ja: ``テンプレート表現`` は、列の ``ルックアップ名`` を使用して、カスタム列 (自分で作成した列) を含む、calibre で使用可能なすべての書誌にアクセスできます。`列` (`フィールド` と呼ばれることもあります) のルックアップ名を見つけるには、マウスを calibre の本リストの列ヘッダに合わせます。カスタム列のルックアップ名は常に ``#`` で始まります。シリーズタイプの列の場合、シリーズ内のその本のシリーズインデックスである ``#lookup name_index`` という名前の追加フィールドがあります。たとえば、``#myseries`` という名前のカスタムシリーズ列がある場合、``#myseries_index`` という名前の列もあります。標準のシリーズ列のインデックスの名前は ``series_index`` です。

en: In addition to the standard column based fields, you also can use:
ja: 標準の列ベースのフィールドに加えて、次のものも使用できます:

en: ``{formats}`` - A list of formats available in the calibre library for a book
ja: ``{formats}`` - calibre ライブラリで利用可能な本の形式のリスト

en: ``{identifiers:select(isbn)}`` - The ISBN of the book
ja: ``{identifiers:select(isbn)}`` - 本の ISBN

en: If the metadata for the field for a given book is not defined then the field in the template is replaced by the empty string (``''``). For example, consider the following template::
ja: 特定の本のフィールドの書誌が定義されていない場合、テンプレートのフィールドは空の文字列 (``''``) に置き換えられます。たとえば、次のテンプレートについて考えてみましょう::

en: If Asimov's book "Second Foundation" is in the series "Foundation" then the template produces::
ja: Asimov の本 "Second Foundation" がシリーズ "Foundation" に含まれている場合、テンプレートは次のように生成します::

en: If a series has not been entered for the book then the template produces::
ja: 本のシリーズが入力されていない場合、テンプレートは次のように生成します::

en: The template processor automatically removes multiple slashes and leading or trailing spaces.
ja: テンプレートプロセッサは、複数のスラッシュと先頭または末尾のスペースを自動的に削除します。

en: Advanced formatting
ja: 高度な整形

en: In addition to metadata substitution, templates can conditionally include additional text and control how substituted data is formatted.
ja: 書誌の置換に加えて、テンプレートには条件付きで追加のテキストを含め、置換されたデータの整形方法を制御できます。

en: **Conditionally including text**
ja: **条件つきでテキストを含める**

en: Sometimes you want text to appear in the output only if a field is not empty. A common case is ``series`` and ``series_index`` where you want either nothing or the two values separated by a hyphen. calibre handles this case using a special ``template expression`` syntax.
ja: フィールドが空でない場合にのみ、出力にテキストを表示したいというような場合があります。よくあるケースは ``series`` と ``series_index` で、何も必要ないか、ハイフンで区切られた 2 つの値が必要です。 calibre は、特殊な ``テンプレート表現`` の構文を使用してこのケースを処理します。

en: For example and using the above Foundation example, assume you want the template to produce `Foundation - 3 - Second Foundation`. This template produces that output:
ja: たとえば、上記の Foundation の例を使用して、テンプレートで `Foundation - 3 - Second Foundation` を生成するとします。このテンプレートはその出力を生成します:

en: However, if a book has no series the template will produce `- - the title`, which is probably not what you want. Generally, people want the result be the title without the extraneous hyphens. You can accomplish this using the following template syntax:
ja: ただし本にシリーズがない場合、テンプレートは `- - タイトル` を生成することになりますが、これはおそらくあなたが望むものではないでしょう。一般的に人々は、意味のないハイフンのないただのタイトルとなることを望むものです。これは、次のテンプレート構文を使用すれば達成できます:

en: This ``template expression`` says that if ``field`` has the value `XXXX` then the result will be `prefix_textXXXXXsuffix_text`. If ``field`` is empty (has no value) then the result will be the empty string (nothing) because the prefix and suffix are ignored. The prefix and suffix can contain blanks.
ja: この ``テンプレート表現`` は ``field`` の値が `XXXX` の場合、結果は `prefix_textXXXXXsuffix_text` になることを示しています。``field`` が空 (値がない) 場合、プレフィックスとサフィックスが無視されるため、結果は空の文字列 (なし) となります。プレフィックスとサフィックスには空白を含めることができます。

en: **Do not use subtemplates (`{ ... }`) or functions (see below) in the prefix or the suffix.**
ja: **プレフィックスとサフィックスには、サブテンプレート (`{ ... }`) や関数 (下を参照) を使用しないでください。**

en: Using this syntax, we can solve the above no-series problem with the template::
ja: この構文を使用すると、テンプレートで上記のシリーズなしの問題を解決できます。

en: The hyphens will be included only if the book has a series index, which it has only if it has a series. Continuing the Foundation example again, the template will produce `Foundation - 1 - Second Foundation`.
ja: ハイフンは、本にシリーズインデックスがある場合にのみ含まれます。シリーズインデックスはシリーズがある場合にのみ含まれます。 Foundationの例を再び続けると、テンプレートは `Foundation - 1 - Second Foundation` を生成します。

en: Notes:
ja: メモ:

en: You must include the colon after the ``lookup name`` if you are using a prefix or a suffix.
ja: プレフィックスやサフィックスを使用している場合は、``ルックアップ名`` の後にコロンを含める必要があります。

en: You must either use either no or both ``|`` characters. Using one, as in ``{field:| - }``, is not allowed.
ja: ``|`` の文字は、使用しないか両方使用するかのどちらかです。``{field:| - }`` のようなひとつだけの使用は許されません。

en: It is OK to provide no text for either the prefix or the suffix, such as in ``{series:|| - }``. The template ``{title:||}`` is the same as ``{title}``.
ja: プレフィックスやサフィックスにテキストを指定せず、``{series:|| - }`` にしてもかまいません。テンプレート `{title:||}`` は ``{title}`` と同じです。

en: **Formatting**
ja: **書式設定**

en: Suppose you want the ``series_index`` to be formatted as three digits with leading zeros. This does the trick:
ja: ``series_index`` を先行ゼロ付きの 3 桁に整形したいとします。次のようにすればそうできます:

en: ``{series_index:0>3s}`` - Three digits with leading zeros
ja: ``{series_index:0>3s}`` - 先行ゼロ付きの 3 桁

en: For trailing zeros, use:
ja: 後置ゼロには、次を使います:

en: ``{series_index:0<3s}`` - Three digits with trailing zeros
ja: ``{series_index:0<3s}`` - 後置ゼロ付きの 3 桁

en: If you use series indices with fractional values, e.g., 1.1, you might want the decimal points to line up. For example, you might want the indices 1 and 2.5 to appear as 01.00 and 02.50 so that they will sort correctly on a device that does lexical sorting. To do this, use:
ja: 1.1 などの小数値のシリーズインデックスを使用する場合は、小数点の位置を揃えたい場合があります。たとえば、インデックス 1 と 2.5 を 01.00 と 02.50 として表示して、辞書順に並べ替えを行うデバイスで正しく並べ替えられるようにすることができます。これを行うには、次を使用します:

en: ``{series_index:0>5.2f}`` - Five characters consisting of two digits with leading zeros, a decimal point, then 2 digits after the decimal point.
ja: ``{series_index:0>5.2f}`` - 先行ゼロ付きの 2 桁、小数点、および小数点以下 2 桁で構成される 5 文字。

en: If you want only the first two letters of the data, use:
ja: データの最初の 2 文字だけが必要な場合は、次を使用します:

en: ``{author_sort:.2}`` - Only the first two letters of the author sort name
ja: ``{author_sort:.2}`` - 著者読みの最初の 2 文字のみ

en: Much of the calibre template language formatting comes from Python. For more details on the syntax of these advanced formatting operations see the `Python documentation <https://docs.python.org/3/library/string.html#formatstrings>`_.
ja: calibre テンプレート言語のフォーマットの多くは Python のものです。これらの高度なフォーマット操作の構文の詳細については、 `Python documentation <https://docs.python.org/3/library/string.html#formatstrings>`_ を参照してください。

en: Using templates to define custom columns
ja: テンプレートを使用してカスタム列を定義する

en: Templates can be used to display information that isn't in calibre metadata, or to display metadata differently from calibre's normal format. For example, you might want to show the ``ISBN``, a field that calibre does not display. You can accomplish this creating a custom column with the type `Column built from other columns` (hereafter called `composite columns`) and providing a template to generate the displayed text. The column will display the result of evaluating the template. For example, to display the ISBN, create the column and enter ``{identifiers:select(isbn)}`` in the template box. To display a column containing the values of two series custom columns, separated by a comma, use ``{#series1:||,}{#series2}``.
ja: テンプレートを使用すると、calibre の書誌にない情報を表示したり、calibre の通常の形式とは異なる方法で書誌を表示したりできます。たとえば、calibre が表示しないフィールドである ISBN を表示したいことがあるかもしれません。これは、`他の列から構築された列` タイプ (以降、複合列と呼びます) を使用してカスタム列を作成し、表示されるテキストを生成するためのテンプレートを提供することで実現できます。この列には、テンプレートの評価結果が表示されます。たとえば、ISBN を表示するには、列を作成し、テンプレートボックスに ``{identifiers:select(isbn)}`` と入力します。 2 つのシリーズカスタム列の値をカンマで区切って含む列を表示するには、``{#series1:||,}{#series2}`` を使用します。

en: Composite columns can use any template option, including formatting.
ja: 複合列は、書式設定を含む任意のテンプレートオプションを使用できます。

en: Note: You cannot edit the data displayed in a composite column. Instead you edit the source columns. If you edit a composite column, for example by double-clicking it, calibre will open the template for editing, not the underlying data.
ja: 注: 複合列に表示されているデータを編集することはできません。代わりに、ソース列を編集します。複合列を編集する場合、たとえばダブルクリックした場合、calibreは、基になるデータではなく、編集用のテンプレートを開きます。

en: Templates and plugboards
ja: テンプレートとプラグボード

en: Plugboards are used for changing the metadata written into books during send-to-device and save-to-disk operations. A plugboard permits you to specify a template to provide the data to write into the book's metadata. You can use plugboards to modify the following fields: authors, author_sort, language, publisher, tags, title, title_sort. This feature helps people who want to use different metadata in books on devices to solve sorting or display issues.
ja: プラグボードは、デバイスへの送信およびディスクへの保存操作中に本に書き込まれる書誌を変更するために使用されます。プラグボードを使用すると、本の書誌に書き込むデータを提供するテンプレートを指定できます。プラグボードを使用すると authors, author_sort, language, publisher, tags, title, title_sort のフィールドを変更できます。この機能は、デバイス上の本で別の書誌を使用して、並べ替えや表示の問題を解決したい人に役立ちます。

en: When you create a plugboard, you specify the format and device for which the plugboard is to be used. A special device is provided, ``save_to_disk``, that is used when saving formats (as opposed to sending them to a device). Once you have chosen the format and device, you choose the metadata fields to change, providing templates to supply the new values. These templates are `connected` to their destination fields, hence the name `plugboards`. You can of course use composite columns in these templates.
ja: プラグボードを作成するときは、プラグボードを使用する形式とデバイスを指定します。形式を保存するときに使用される特別なデバイス ``save_to_disk`` が提供されます (デバイスに送信するのではありません)。形式とデバイスを選択したら、変更する書誌フィールドを選択し、新しい値を提供するためのテンプレートを提供します。これらのテンプレートは宛先フィールドに `接続` されているため、プラグボードという名前が付けられています。これらのテンプレートでは、もちろん複合列を使用できます。

en: When a plugboard might apply (Content server, save to disk, or send to device), calibre searches the defined plugboards to choose the correct one for the given format and device. For example, to find the appropriate plugboard for an EPUB book being sent to an ANDROID device, calibre searches the plugboards using the following search order:
ja: プラグボードが適用される可能性がある場合 (コンテンツサーバ、ディスクに保存、またはデバイスに送信)、calibre は定義されたプラグボードを検索して、指定された形式とデバイスに適したプラグボードを選択します。たとえば、ANDROID デバイスに送信される EPUB ブックに適切なプラグボードを見つけるために、calibre は次の検索順でプラグボードを検索します:

en: a plugboard with an exact match on format and device, e.g., ``EPUB`` and ``ANDROID``
ja: 形式とデバイスが完全に一致するプラグボード。例: ``EPUB`` かつ ``ANDROID``

en: a plugboard with an exact match on format and the special ``any device`` choice, e.g., ``EPUB`` and ``any device``
ja: 形式が完全に一致し、特別な ``任意のデバイス`` を選択できるプラグボード。例: ``EPUB`` かつ ``任意のデバイス``

en: a plugboard with the special ``any format`` choice and an exact match on device, e.g., ``any format`` and ``ANDROID``
ja: 特別な ``任意のフォーマット`` を選択し、デバイス上で完全に一致するプラグボード。例: ``任意のフォーマット`` かつ ``ANDROID``

en: a plugboard with ``any format`` and ``any device``
ja: ``任意のフォーマット`` と ``任意のデバイス`` を備えたプラグボード

en: The tags and authors fields have special treatment, because both of these fields can hold more than one item. A book can have many tags and many authors. When you specify that one of these two fields is to be changed, the template's result is examined to see if more than one item is there. For tags, the result is cut apart wherever calibre finds a comma. For example, if the template produces the value ``Thriller, Horror``, then the result will be two tags, ``Thriller`` and ``Horror``. There is no way to put a comma in the middle of a tag.
ja: タグフィールドと著者フィールドはどちらも複数のアイテムを保持できるため、特殊な扱いがあります。本にはいくつものタグと何人もの著者を含めることができます。これら 2 つのフィールドのいずれかを変更するように指定すると、テンプレートの結果に複数の項目がないか確認されます。タグの場合、calibre はカンマを見つけるたびに結果を分割します。たとえばテンプレートが値 ``Thriller, Horror`` を生成すると、結果は2つのタグ、``Thriller`` と ``Horror``になります。タグの途中にカンマを入れる方法はありません。

en: The same thing happens for authors, but using a different character for the cut, a `&` (ampersand) instead of a comma. For example, if the template produces the value ``Blogs, Joe&Posts, Susan``, then the book will end up with two authors, ``Blogs, Joe`` and ``Posts, Susan``. If the template produces the value ``Blogs, Joe;Posts, Susan``, then the book will have one author with a rather strange name.
ja: 著者にも同じことが起こりますが、分割に別の文字、カンマの代わりに `&` (アンパサンド) を使用します。たとえばテンプレートが値 ``Blogs, Joe&Posts, Susan`` を生成すると、本の著者は``Blogs, Joe`` と ``Posts, Susan`` の 2 人になります。テンプレートが ``Blogs, Joe;Posts, Susan`` という値を生成すると、その本の著者はかなり変わった名前の 1 人となります。

en: Plugboards affect the metadata written into the book when it is saved to disk or written to the device. Plugboards do not affect the metadata used by ``save to disk`` and ``send to device`` to create the file names. Instead, file names are constructed using the templates entered on the appropriate preferences window.
ja: プラグボードは、本がディスクに保存されるとき、またはデバイスに書き込まれるときに、本に書き込まれる書誌に影響を与えます。プラグボードは、ファイル名を作成するための ``ディスクに保存`` や ``デバイスに送信`` によって使われる書誌には影響しません。代わりに、ファイル名は、適切な設定ウィンドウに入力されたテンプレートを使用して作成されます。

en: Using functions in templates - Single Function Mode
ja: テンプレートでの関数の使用 - 単関数モード

en: Suppose you want to display the value of a field in upper case when that field is normally in title case. You can do this using `template functions`. For example, to display the title in upper case use the ``uppercase`` function, as in ``{title:uppercase()}``. To display it in title case, use ``{title:titlecase()}``.
ja: あるフィールドが通常はタイトルケースで、その値を大文字で表示したいと仮定します。`テンプレート関数` を使用すれば、それが可能です。たとえば、タイトルを大文字で表示するには ``uppercase`` 関数を使用して、`{title:uppercase()}`` とします。タイトルケースで表示するには ``{title:titlecase()}`` を使用します。

en: Functions go into the format part of the template, after the ``:`` and before the first ``|`` or the closing ``}`` if no prefix/suffix is used. If you have both a format and a function reference, the function comes after a second ``:``.  Functions return the value of the column specified in the template, suitably modified.
ja: 関数は、テンプレートのフォーマット部分に入ります。それは ``:`` の後、かつ最初の ``|`` またはプレフィックス/サフィックスが使われていれば閉じ括弧 ``}`` の前です。フォーマットと関数参照の両方がある場合、関数は 2 個目の ``:`` の後に来ます。関数は、テンプレートで指定された列の値を適切に変更して返します。

en: The syntax for using functions is one of::
ja: 関数を使用するための構文は、次のいずれかです::

en: Function names must always be followed by opening and closing parentheses. Some functions require extra values (arguments), and these go inside the parentheses. Arguments are separated by commas. Literal commas (commas as text, not argument separators) must be preceded by a backslash (``\``) . The last (or only) argument cannot contain a textual closing parenthesis.
ja: 関数名の後には、必ず開き括弧と閉じ括弧を付ける必要があります。一部の関数は追加の値 (引数) を必要とし、これらは括弧内に入ります。引数はカンマで区切ります。リテラルコンマ (引数の区切り文字ではなくテキストとしてのカンマ) の前には、バックスラッシュ (``\``) を付ける必要があります。最後の (または唯一の) 引数には、テキストの閉じ括弧を含めることはできません。

en: Functions are evaluated before format specifications and the prefix/suffix. See further down for an example of using both a format and a function.
ja: 関数は、フォーマット指定とプレフィックス/サフィックスの前に評価されます。フォーマットと関数の両方を使用する例については、さらに下を参照してください。

en: **Important**: If you have programming experience, please note that the syntax in `Single Function Mode` is not what you expect. Strings are not quoted and spaces are significant. All arguments are considered to be constants; there are no expressions.
ja: **重要**: プログラミングの経験がある場合は、`単関数モード` の構文が思ったものと違うことに注意してください。文字列は引用符で囲まれておらず、スペースは重要です。すべての引数は定数と見なされます。式はありません。

en: **Do not use subtemplates (`{ ... }`) as function arguments.** Instead, use :ref:`Template Program Mode <template_mode>` and :ref:`General Program Mode <general_mode>`.
ja: **サブテンプレート (`{ ... }`) を関数の引数として使用しないでください。**代わりに :ref:`テンプレートプログラムモード <template_mode>` および :ref:`一般プログラムモード <general_mode>` を使用してください。

en: **Using functions and formatting in the same template**
ja: **同じテンプレートで関数と書式を使用する**

en: Suppose you have an integer custom column ``#myint`` that you want displayed with leading zeros, as in ``003``. One way to do this is to use a format of ``0>3s``. However, by default if a number (integer or float) equals zero then the value is displayed as the empty string so zero values will produce the empty string, not ``000``. If you want to see ``000`` values then you use both the format string and the ``ifempty`` function to change the empty value back to a zero. The template would be::
ja: 整数のカスタム列 ``#myint`` を ``003`` のように先行ゼロ付きで表示したいと仮定します。これを実現する方法のひとつは ``0>3s`` という書式を使用することです。ただしデフォルトでは数値 (整数または浮動小数点) がゼロに等しい場合には、その値は空の文字列として表示されるため、値ゼロは ``000`` ではなく空の文字列となります。値を ``000`` と表示したいのであれば、書式文字列と ``ifempty`` 関数を両方使用して空の値をゼロに戻してやります。そのテンプレートは次のようになるでしょう::

en: Note that you can use the prefix and suffix as well. If you want the number to appear as ``[003]`` or ``[000]``, then use the template::
ja: プレフィックスとサフィックスも使用できます。もし数字を ``[003]`` や ``[000]`` のように表示したいのであれば、次のテンプレートを使用します::

en: General Program Mode
ja: 一般プログラムモード

en: `General Program Mode` (`GPM`) replaces `template expressions` with a program written in the `template language`. The syntax of the language is defined by the following grammar::
ja: `一般プログラムモード` (`GPM`) は `テンプレート表現` を `テンプレート言語` で記述したプログラムに置き換えます。言語の構文は、次の文法で定義されます::

en: a ``top_expression`` always has a value. The value of an ``expression_list`` is the value of the last ``top_expression`` in the list. For example, the value of the expression list ``1;2;'foobar';3`` is ``3``.
ja: ``top_expression`` には常に値があります。``expression_list`` の値は、リストの最後の ``top_expression`` の値です。たとえば、式リストの値 ``1;2;'foobar';3`` は ``3`` です。

en: In a logical context, any non-empty value is ``True``
ja: 論理的なコンテキストでは、空でない値はすべて ``True``

en: In a logical context, the empty value is ``False``
ja: 論理的なコンテキストでは、空の値はすべて ``False``

en: Strings and numbers can be used interchangeably. For example, ``10`` and ``'10'`` are the same thing.
ja: 文字列と数字は同じ意味で使用できます。たとえば ``10`` と ``'10'`` は同じものです。

en: **Operator precedence**
ja: **演算子の優先順位**

en: The operator precedence (order of evaluation) from highest (evaluated first) to lowest (evaluated last) is:
ja: 演算子の優先順位 (評価する順) の最高 (最初に評価) から最低 (最後に評価) までは、次のとおりです:

en: Function calls, constants, parenthesized expressions, statement expressions, assignment expressions, field references.
ja: 関数呼び出し、定数、括弧で囲まれた式、比較演算式、代入式、フィールド参照。

en: Unary plus (``+``) and minus (``-``). These operators evaluate right to left.
ja: 単項プラス (``+``) およびマイナス (``-``)。これらの演算子は右から左に評価します。

en: These and all the other arithmetic operators return integers if the expression results in a fractional part equal to zero. For example, if an expression returns ``3.0`` it is changed to ``3``.
ja: これらおよび他のすべての算術演算子は、式の小数部がゼロならば整数を返します。たとえば式が ``3.0`` を返す場合、それは ``3`` に変更されます。

en: Multiply (``*``) and divide (``/``). These operators are associative and evaluate left to right. Use parentheses if you want to change the order of evaluation.
ja: 乗算 (``*``) と除算 (``/``)。これらの演算子は結合性があり、左から右に評価します。評価の順序を変更する場合は、括弧を使用してください。

en: Add (``+``) and subtract (``-``). These operators are associative and evaluate left to right.
ja: 加算 (``+``) と減算 (``-``)。これらの演算子は結合性があり、左から右に評価します。

en: Numeric and string comparisons. These operators return ``'1'`` if the comparison succeeds, otherwise the empty string (``''``). Comparisons are not associative: ``a < b < c`` is a syntax error.
ja: 数値と文字列の比較。これらの演算子は、比較が成功した場合は ``'1'`` を返し、それ以外の場合は空の文字列 (``''``)を返します。比較は連想的ではありません。 ``a < b < c`` は構文エラーです。

en: String concatenation (``&``). The ``&`` operator returns a string formed by concatenating the left-hand and right-hand expressions. Example: ``'aaa' & 'bbb'`` returns ``'aaabbb'``. The operator is associative and evaluates left to right.
ja: 文字列の連結 (``&``)。``&`` 演算子は、左辺と右辺の式を連結して形成された文字列を返します。例: ``'aaa' & 'bbb'`` は ``'aaabbb'`` を返します。演算子は結合性があり、左から右に評価します。

en: Unary logical not (``!``). This operator returns ``'1'`` if the expression is False (evaluates to the empty string), otherwise ``''``.
ja: 単項論理否定 (``!``)。この演算子は、式が False (空の文字列に評価される) なら ``'1'``を返し、そうでなければ ``''``を返します。

en: Logical and (``&&``). This operator returns '1' if both the left-hand and right-hand expressions are True, or the empty string ``''`` if either is False. It is associative, evaluates left to right, and does `short-circuiting <https://chortle.ccsu.edu/java5/Notes/chap40/ch40_2.html>`_.
ja: 論理積 (``&&``)。この演算子は、左辺と右辺の両方の式が True のときに '1' を返し、どちらかが False なら空の文字列 ``''`` を返します。これは連想的で、左から右に評価し、 `短絡評価 <https://chortle.ccsu.edu/java5/Notes/chap40/ch40_2.html>`_ を行います。

en: Logical or (``||``). This operator returns ``'1'`` if either the left-hand or right-hand expression is True, or ``''`` if both are False. It is associative, evaluates left to right, and does `short-circuiting <https://chortle.ccsu.edu/java5/Notes/chap40/ch40_2.html>`_. It is an `inclusive or`, returning ``'1'`` if both the left- and right-hand expressions are True.
ja: 論理和 (``||``)。この演算子は、左辺または右辺の式のいずれかが True であれば ``'1'``を返し、両方とも False なら ``''`` を返します。これは連想的で、左から右に評価し、 `短絡評価 <https://chortle.ccsu.edu/java5/Notes/chap40/ch40_2.html>`_ を行います。 これは `包含的論理和` で、左辺または右辺の式の両方が True のときに ``'1'`` を返します。

en: **Field references**
ja: **フィールド参照**

en: **If expressions**
ja: **if 文**

en: ``If`` expressions first evaluate the ``condition``. If the ``condition`` is True (a non-empty value) then the ``expression_list`` in the ``then`` clause is evaluated. If it is False then if present the ``expression_list`` in the ``elif`` or ``else`` clause is evaluated. The ``elif`` and ``else`` parts are optional. The words ``if``, ``then``, ``elif``, ``else``, and ``fi`` are reserved; you cannot use them as identifier names. You can put newlines and white space wherever they make sense. The ``condition`` is a ``top_expression`` not an ``expression_list``; semicolons are not allowed. The ``expression_lists`` are semicolon-separated sequences of ``top_expressions``. An ``if`` expression returns the result of the last ``top_expression`` in the evaluated ``expression_list``, or the empty string if no expression list was evaluated.
ja: ``If`` 文は最初に ``condition`` を評価します。``condition`` が True (空でない値) であれば、``then`` 句の中にある ``expression_list`` が評価されます。False なら ``elif`` または ``else`` 句の中に ``expression_list`` があればそれが評価されます。``elif`` と ``else`` の部分はオプションです。``if``, ``then``, ``elif``, ``else``, および ``fi`` は予約語です。識別子の名前として使用することはできません。 意味のあるところならどこにでも改行と空白を置くことができます。``condition`` は ``top_expression`` であって ``expression_list`` ではありません。セミコロンは使用できません。``expression_lists`` は ``top_expressions`` のセミコロン区切りのシーケンスです。``if`` 文は評価した ``expression_list`` の中で最後の ``top_expression`` を返し、評価したものがなければ空の文字列を返します。

en: Examples::
ja: 例::

en: Nested ``if`` example::
ja: 入れ子になった ``if`` の例::

en: As said above, an ``if`` produces a value. This means that all the following are equivalent::
ja: 上で説明したように ``if`` は値を生成します。これは、次のすべてが同等であることを意味します::

en: **For expressions**
ja: **for 文**

en: Example: This template removes the first hierarchical name for each value in Genre (``#genre``), constructing a list with the new names::
ja: 例: このテンプレートは、ジャンル (``#genre``) の各値の最初の階層名を削除し、新しい名前でリストを作成します::

en: If the original Genre is `History.Military, Science Fiction.Alternate History, ReadMe` then the template returns `Military, Alternate History, ReadMe`. You could use this template in calibre's :guilabel:`Edit metadata in bulk -> Search & replace` with :guilabel:`Search for` set to ``template`` to strip off the first level of the hierarchy and assign the resulting value to Genre.
ja: 元のジャンルが `History.Military, Science Fiction.Alternate History, ReadMe` の場合、テンプレートは `Military, Alternate History, ReadMe` を返します。このテンプレートを calibre の :guilabel:`書誌を一括編集 -> 検索と置換` で :guilabel:`検索` に ``template`` を設定して階層の最初のレベルを取り除き、結果の値をジャンルに割り当てます。

en: Note: the last line in the template, ``new_tags``, isn't strictly necessary in this case because ``for`` returns the value of the last top_expression in the expression list. The value of an assignment is the value of its expression, so the value of the ``for`` statement is what was assigned to ``new_tags``.
ja: 注: この場合、テンプレートの最後の行である ``new_tags`` は必ずしも必要ではありません。これは、``for`` が式リストの最後の top_expression の値を返すためです。割り当ての値はその式の値であるため、``for`` 文の値は ``new_tags`` に割り当てられたものです。

en: **Function definition**
ja: **関数の定義**

en: Arguments are positional. When a function is called the supplied arguments are matched left to right against the defined parameters, with the value of the argument assigned to the parameter. It is an error to provide more arguments than defined parameters. Parameters can have default values, such as ``a = 25``. If an argument is not supplied for that parameter then the default value is used, otherwise the parameter is set to the empty string.
ja: 引数はキーワード引数です。関数が呼び出されると、指定された引数が定義されたパラメータに対して左から右に照合され、引数の値がパラメータに割り当てられます。定義されたパラメータよりも多くの引数を指定するとエラーになります。パラメータには、``a = 25`` などのデフォルト値を設定できます。そのパラメータに引数が指定されていない場合はデフォルト値が使用され、それ以外の場合はパラメータが空の文字列に設定されます。

en: The ``return`` statement can be used in a local function.
ja: ``return`` 文はローカル関数の中で使用できます。

en: A function must be defined before it can be used.
ja: 関数は、使用する前に定義する必要があります。

en: Example: This template computes an approximate duration in years, months, and days from a number of days. The function ``to_plural()`` formats the computed values. Note that the example also uses the ``&`` operator::
ja: 例: このテンプレートは、日数から年、月、日でおおよその期間を計算します。関数 `to_plural()`` は、計算された値を整形します。ただしこの例では``&`` 演算子も使用してます::eo

en: **Relational operators**
ja: **関係演算子**

en: There are two forms of relational operators: string comparisons and numeric comparisons.
ja: 関係演算子は 2 種類あり、それは文字列比較と数値比較です。

en: The numeric comparison operators are ``==#``, ``!=#``, ``<#``, ``<=#``, ``>#``, ``>=#``. The left and right expressions must evaluate to numeric values with two exceptions: both the string value "None" (undefined field) and the empty string evaluate to the value zero.
ja: 数値比較演算子は、``==#``, ``!=#``, ``<#``, ``<=#``, ``>#``, ``>=#`` です。左と右の式は、2 つの例外を除いて数値に評価される必要があります。文字列値 "None" (未定義のフィールド) と空の文字列の両方が値ゼロに評価されます。

en: Examples:
ja: 例:

en: ``program: 'f.o' in field('series')`` returns ``'1'`` if the book's series matches the regular expression ``f.o`` (e.g., `foo`, `Off Onyx`, etc.), otherwise ``''``.
ja: ``program: 'f.o' in field('series')`` は、本のシリーズが正規表現 ``f.o`` (例: `foo`, `Off Onyx`, など) とマッチすれば ``'1'`` を返し、そうでなければ ``''`` を返します。

en: ``program: if 11 > 2 then 'yes' else 'no' fi`` returns ``'no'`` because the ``>`` operator does a lexical comparison.
ja: ``program: if 11 > 2 then 'yes' else 'no' fi`` は ``'no'`` を返します。なぜなら ``>`` 演算子が辞書比較を行うからです。

en: ``program: if 11 ># 2 then 'yes' else 'no' fi`` returns ``'yes'`` because the ``>#`` operator does a numeric comparison.
ja: ``program: if 11 ># 2 then 'yes' else 'no' fi`` は ``'yes'`` を返します。なぜなら ``>#`` 演算子は数値比較を行うからです。

en: More complex programs in template expressions - Template Program Mode
ja: より複雑なテンプレート表現のプログラム - テンプレートプログラムモード

en: `Template Program Mode` (`TPM`) is a blend of :ref:`General Program Mode <general_mode>` and :ref:`Single Function Mode <single_mode>`. `TPM` differs from Single Function Mode in that it permits writing template expressions that refer to other metadata fields, use nested functions, modify variables, and do arithmetic. It differs from `General Program Mode` in that the template is contained between ``{`` and ``}`` characters and doesn't begin with the word ``program:``. The program portion of the template is a General Program Mode expression list.
ja: `テンプレートプログラムモード` (`TPM`) は、 :ref:`一般プログラムモード <general_mode>` and :ref:`単関数モード <single_mode>` を組み合わせたものです。 `TPM` は、他の書誌フィールドを参照し、ネストされた関数を使用し、変数を変更し、算術演算を実行するテンプレート式を記述できるという点で、単関数モードとは異なります。このテンプレートが ``{`` と ``}`` 文字の間に置かれ、``program:`` という部分で始まらないという点で、`一般プログラムモード` とは異なります。テンプレートのプログラム部分は、一般プログラムモードの式リストです。

en: Example: assume you want a template to show the series for a book if it has one, otherwise show the value of a custom field #genre. You cannot do this in the :ref:`Single Function Mode <single_mode>` because you cannot make reference to another metadata field within a template expression. In `TPM` you can, as the following expression demonstrates::
ja: 例: テンプレートで、ある本がシリーズものならシリーズを表示し、そうでなければカスタムフィールド #genre の値を表示したいと仮定します。:ref:`単関数モード <single_mode>` ではテンプレートの式の中からは別の書誌フィールドを参照できないため、この処理は実現できません。 `TPM` でなら可能です。次の式のようにします::

en: The example shows several things:
ja: 例からはいくつかのことがわかります:

en: white space is ignored and can be used anywhere within the expression.
ja: 空白は無視され、式の中のどこでも使用できます。

en: constant strings are enclosed in matching quotes, either ``'`` or ``"``.
ja: 定数文字列は対になる引用符、``'`` または ``"`` のいずれかで囲まれます。

en: E-book conversion dialog
ja: 電子書籍変換ダイアログ

en: Stored templates
ja: 保存済みテンプレート

en: ``foo()`` -- call the template passing no arguments.
ja: ``foo()`` -- 引数を渡さずにテンプレートを呼び出します。

en: ``foo(a, b)`` call the template passing the values of the two variables ``a`` and ``b``.
ja: ``foo(a, b)`` は、2 つの変数 ``a`` と ``b`` の値を渡すテンプレートを呼び出します。

en: ``foo(if field('series') then field('series_index') else 0 fi)`` -- if the book has a ``series`` then pass the ``series_index``, otherwise pass the value ``0``.
ja: ``foo(if field('series') then field('series_index') else 0 fi)`` -- 本に ``series`` があれば  ``series_index`` を渡し、そうでなければ値 ``0`` を渡します。

en: Examples, again assuming the stored template is named ``foo``:
ja: 例として、保存されたテンプレートの名前が今回も ``foo`` であると仮定します:

en: ``foo('#myseries')`` -- argument ``key`` is assigned the value ``'myseries'`` and the argument ``alternate`` is assigned the default value ``'series'``.
ja: ``foo('#myseries')`` -- 引数 ``key`` には値 ``'myseries'`` が割り当てられ、引数 ``alternate`` にはデフォルト値 ``'series'`` が割り当てられます。

en: ``foo('series', '#genre')`` the variable ``key`` is assigned the value ``'series'`` and the variable ``alternate`` is assigned the value ``'#genre'``.
ja: ``foo('series', '#genre')`` 変数 ``key`` には値 ``'series'`` が割り当てられ、変数 ``alternate`` には値 ``'#genre'`` が割り当てられます。

en: ``foo()`` -- the variable ``key`` is assigned the empty string and the variable ``alternate`` is assigned the value ``'series'``.
ja: ``foo()`` -- 変数 ``key`` には空の文字列が割り当てられ、変数 ``alternate`` には値 ``'series'`` が割り当てられます。

en: An easy way to test stored templates is using the ``Template tester`` dialog. For ease of access give it a keyboard shortcut in :guilabel:`Preferences->Advanced->Keyboard shortcuts->Template tester`. Giving the ``Stored templates`` dialog a shortcut will help switching more rapidly between the tester and editing the stored template's source code.
ja: 保存済みテンプレートをテストする簡単な方法は、 ``テンプレートテスタ`` ダイアログを使用することです。アクセスしやすくするには、:guilabel:`環境設定->高度な設定->キーボードショートカット->テンプレートテスタ` でキーボードショートカットを指定します。 ``保存済みテンプレート`` ダイアログにショートカットを指定すると、テスタをすばやく切り替えたり、保存されたテンプレートのソースコードを編集したりするのに役立ちます。

en: Providing additional information to templates
ja: テンプレートに追加情報を与える

en: A developer can choose to pass additional information to the template processor, such as application-specific book metadata or information about what the processor is being asked to do. A template can access this information and use it during the evaluation.
ja: 開発者は、アプリケーション固有の本の書誌やプロセッサに要求されていることに関する情報など、追加情報をテンプレートプロセッサに渡すことを選択できます。テンプレートはこの情報にアクセスして、評価中に使用できます。

en: **Developer: how to pass additional information**
ja: **開発者: 追加情報の渡し方**

en: **Template writer: how to access the additional information**
ja: **テンプレート作者: 追加情報のアクセス方法**

en: where ``id`` is any legal variable name. This function checks whether the additional information provided by the developer contains the name. If it does then the function assigns the provided value to a template local variable with that name. If the name is not in the additional information and if an ``expression`` is provided, the ``expression`` is evaluated and the result is assigned to the local variable. If neither a value nor an expression is provided, the function assigns the empty string (``''``) to the local variable.
ja: ここで、``id`` は任意の有効な変数名です。この関数は、開発者から提供された追加情報に名前が含まれているかどうかを確認します。その場合、関数は提供された値をその名前のテンプレートローカル変数に割り当てます。名前が追加情報に含まれておらず、式が指定されている場合、式が評価され、結果がローカル変数に割り当てられます。値も式も指定されていない場合、関数は空の文字列 (``''``) をローカル変数に割り当てます。

en: Notes on the difference between modes
ja: モード間の違いに関する注意事項

en: The three program modes, :ref:`Single Function Mode <single_mode>` (SFM), :ref:`Template Program Mode <template_mode>` (`TPM`), and :ref:`General Program Mode <general_mode>` (`GPM`), work differently. SFM is intended to be 'simple' so it hides a lot of programming language bits.
ja: 3つのプログラムモード、 :ref:`単関数モード <single_mode>` (SFM), :ref:`テンプレートプログラムモード <template_mode>` (`TPM`), and :ref:`一般プログラムモード <general_mode>` (`GPM`)は、それぞれ動作が異なります。 SFMは「シンプル」を目指しているため、多くのプログラミング言語情報を隠します。

en: Differences:
ja: 相違点:

en: In SFM the value of the column is always passed as an 'invisible' first argument to a function included in the template.
ja: SFM では、列の値は常に「非表示」の最初の引数としてテンプレートに含まれる関数に渡されます。

en: SFM doesn't support the difference between variables and strings; all values are strings.
ja: SFMは、変数と文字列の違いをサポートしていません。すべての値は文字列です。

en: The following SFM template returns either the series name or the string "no series"::
ja: 次のSFMテンプレートは、シリーズ名か文字列 "no series" のいずれかを返します::

en: The equivalent template in `TPM` is ::
ja: `TPM` で同等のテンプレートは ::

en: The equivalent template in `GPM` is::
ja: `GPM` で同等のテンプレートは::

en: The first argument to ``ifempty`` is the value of the field ``series``. The second argument is the string ``no series``. In SFM the first argument, the value of the field, is automatically passed (the invisible argument).
ja: ``ifempty`` の最初の引数は、フィールド ``series`` の値です。 2 番目の引数は文字列 ``no series`` です。 SFMでは、最初の引数であるフィールドの値が自動的に渡されます (非表示の引数)。

en: Several template functions, for example ``booksize()`` and ``current_library_name()``, take no arguments. Because of the 'invisible argument' you cannot use these functions in SFM.
ja: ``booksize()`` や ``current_library_name()`` などのテンプレート関数には引数を受け取らないものがいくつかあります。 「目に見えない引数」を使用するせいで、SFMではこれらの関数は使用できません。

en: Nested functions, where a function calls another function to compute an argument, cannot be used in SFM. For example this template, intended to return the first 5 characters of the series value uppercased, won't work in SFM::
ja: 関数が別の関数を呼び出して引数を計算する入れ子関数は、SFMでは使用できません。たとえば、大文字のシリーズ値の最初の 5 文字を​​返すことを目的としたこのテンプレートは、SFMでは機能しません::

en: `TPM` and `GPM` support nested functions. The above template in `TPM` would be::
ja: `TPM` と`GPM` は、入れ子の関数をサポートします。 `TPM` の上記のテンプレートは次のようになります。

en: In `GPM` it would be::
ja: `GPM` では次のようになります::

en: As noted in the above :ref:`Template Program Mode <template_mode>` section, using ``{`` and ``}`` characters in `TPM` string literals can lead to errors or unexpected results because they confuse the template processor. It tries to treat them as template boundaries, not characters. In some but not all cases you can replace a ``{`` with ``[[`` and a ``}`` with `]]`. Generally, if your program contains ``{`` and ``}`` characters then you should use `General Program Mode`.
ja: 上記のテンプレートプログラムモードのセクションで説明したように、TPM文字列リテラルで{および}文字を使用すると、テンプレートプロセッサが混乱するため、エラーや予期しない結果が発生する可能性があります。それらを文字ではなくテンプレート境界として処理しようとします。すべてではありませんが ``{`` を ``[[`` に、そして ``}`` を `]]` に置き換えることができる場合もあります。一般的に、プログラムに ``{`` や ``}`` の文字が含まれている場合には `一般プログラムモード` を使用すべきです。

en: User-defined Python template functions
ja: ユーザ定義の Python テンプレート関数

en: Special notes for save/send templates
ja: テンプレートの保存/送信に関する特記事項

en: For example, assume we want the folder structure `series/series_index - title`, with the caveat that if series does not exist, then the title should be in the top folder. The template to do this is::
ja: たとえば、フォルダの構造を `series/series_index - title` としたいが、シリーズが存在しない場合はタイトルを最上位のフォルダに配置したいと仮定します。これを行うためのテンプレートは次のとおりです::

en: The slash and the hyphen appear only if series is not empty.
ja: スラッシュとハイフンは、シリーズが空でない場合にのみ表示されます。

en: The lookup function lets us do even fancier processing. For example, assume that if a book has a series, then we want the folder structure `series/series index - title.fmt`. If the book does not have a series then we want the folder structure `genre/author_sort/title.fmt`. If the book has no genre then we want to use 'Unknown'. We want two completely different paths, depending on the value of series.
ja: ルックアップ関数を使用すると、さらに高度な処理を実行できます。たとえば、本にシリーズがあるときにはフォルダ構造を `series/series index - title.fmt` にしたいと仮定します。そして本にシリーズがない場合は、フォルダ構造を `genre/author_sort/title.fmt` にしたいものとします。その本にジャンルがない場合は 'Unknown' を使用します。series の値に応じて、2つの完全に異なるパスが必要です。

en: To accomplish this, we:
ja: これを達成するには:

en: Create a composite field (give it lookup name #aa) containing ``{series}/{series_index} - {title}``. If the series is not empty, then this template will produce `series/series_index - title`.
ja: ``{series}/{series_index} - {title}`` を含む複合フィールドを作成します (ルックアップ名 #aa を指定します)。シリーズが空でなければ、このテンプレートは `series/series_index - title` を生成します。

en: Create a composite field (give it lookup name #bb) containing ``{#genre:ifempty(Unknown)}/{author_sort}/{title}``. This template produces `genre/author_sort/title`, where an empty genre is replaced with `Unknown`.
ja: ``{#genre:ifempty(Unknown)}/{author_sort}/{title}`` を含む複合フィールドを作成します (ルックアップ名 #bb を指定します)。このテンプレートは `genre/author_sort/title` を生成し、空のジャンルは `Unknown` に置き換えられます。

en: Tips
ja: ヒント

en: Use the Template Tester to test templates. Add the tester to the context menu for books in the library and/or give it a keyboard shortcut.
ja: テンプレートテスタを使用してテンプレートをテストします。テスタをライブラリ内の本のコンテキストメニューに追加するか、キーボードショートカットを指定します。

en: Templates can use other templates by referencing composite columns built with the desired template. Alternatively, you can use Stored Templates.
ja: テンプレートは、他のテンプレートを使用できます。それをするには、使用したいテンプレートの作成した複合列を参照します。または、保存済みテンプレートを使用することもできます。

en: In a plugboard, you can set a field to empty (or whatever is equivalent to empty) by using the special template ``{}``. This template will always evaluate to an empty string.
ja: 書誌の置換に加えて、テンプレートには条件付きで追加のテキストを含め、置換されたデータの整形方法を制御できます。

en: The technique described above to show numbers even if they have a zero value works with the standard field series_index.
ja: ゼロ値であっても数値を表示する上記の手法は、標準フィールド series_index で機能します。

en: Template function reference
ja: テンプレート関数リファレンス
