Localization Support
Asciidoctor is not restricted to working with English-only content. Asciidoctor can process the full range of the UTF-8 character set. That means you can write your document in any language, save the file with UTF-8 encoding, and expect Asciidoctor to convert the text properly.
Furthermore, you can customize the built-in labels (e.g., “Appendix”) to match the language in which you are writing. This process is known as localization (l10n). The built-in labels used in the output generated by Asciidoctor are English by default. These labels can be modified by changing the value of the corresponding attributes.
There are some caveats to know about:
-
Currently, the official HTML and PDF converters only fully support left-to-right (and top-to-bottom) reading. Support for right-to-left (RTL) is being considered. See issue #1601 for details. In the interim, you can leverage the DocBook toolchain to get right-to-left support.
-
Attributes that store dates and times (e.g.,
docdatetime
) are always formatted like2019-01-04 19:26:06 -0600
. -
Application messages (i.e., log messages) are always in English.
-
Asciidoctor does not support the language conf files used by AsciiDoc.py. However, Asciidoctor does provide a translation file that can be used for a similar purpose.
Translating built-in labels
When converting to DocBook, you can rely on the DocBook toolchain to translate (most) built-in labels.
To activate this feature, set the lang
attribute to a valid country code (which defaults to en
for English).
For example:
$ asciidoctor -a lang=es -b docbook article.adoc
The list of supported languages, as well as additional language considerations for DocBook, are described in DocBook XSL: The Complete Guide.
The lang
attribute does not enable automatic translation of built-in labels when converting directly to HTML or PDF.
It’s merely a hint to configure the DocBook toolchain.
If you’re not using the DocBook toolchain for publishing, you must translate each built-in label yourself.
One way is to set the following attributes in the document header or by passing the attributes via the API or CLI:
Attribute | Default English Value | Notes |
---|---|---|
|
Appendix |
|
|
Appendix |
Used when referencing an appendix. |
|
Caution |
|
|
Chapter |
Only applies when |
|
Chapter |
Used when referencing a chapter. |
|
Example |
|
|
Figure |
|
|
Important |
|
|
Last updated |
|
|
not set |
By default, listing blocks do not have captions.
Specify |
|
NAME |
Only applies when |
|
Note |
|
|
Part |
|
|
Part |
Used when referencing a part. |
|
not set |
Only applies when |
|
Section |
Used when referencing a section. |
|
Table |
|
|
Tip |
|
|
Table of Contents |
|
|
Untitled |
|
|
Version |
|
|
Warning |
If you plan to support multiple languages, you’ll want to define the attributes for each language inside a conditional preprocessor directive. For example:
ifeval::["{lang}" == "de"]
:caution-caption: Achtung
...
endif::[]
Of course, you’re probably hoping this has already been done for you. Indeed, it has!
You can find an AsciiDoc file in the Asciidoctor repository that provides translations of these attributes for most major languages. Thus far, the built-in labels have been translated into the following languages: Arabic, Belarusian, Bulgarian, Catalan, Czech, Danish, Dutch, German, Spanish, Persian (Farsi), Finnish, French, Hungarian, Bahasa Indonesian, Italian, Japanese, Korean, Norwegian Bokmål, Norwegian Nynorsk, Polish, Portuguese, Brazilian Portuguese, Romanian, Russian, Serbian Cyrillic, Serbian Latin, Swedish, Turkish, Ukrainian, Vietnamese, Simplified Chinese, and Traditional Chinese. The translations are defined using AsciiDoc attribute entries inside conditional preprocessor blocks, just as suggested above.
To use this file to translate the built-in labels according the value of the lang
attribute (just like the DocBook toolchain does), follow these steps:
-
Download the AsciiDoc file attributes.adoc from the Asciidoctor repository.
-
Put the file in the folder locale relative to your document.
-
Add the following line to the header of your AsciiDoc document:
include::locale/attributes.adoc[]
-
Set the language using the
lang
attribute. This attribute must be set before the include directive gets processed. For example:-a lang=es
The built-in labels will now be translated automatically based on the value of the lang
attribute.
There’s an ongoing discussion about how to make language support even simpler (issue #1129). Input is welcome.
Translation
Asciidoctor (or DocBook) currently does not support translation of content out of the box. There’s a proposal to integrate gettext (discussion), and suggestions are welcome.