View on GitHub


The multilingual framework for localizing LaTeX, LuaLaTeX, XeLaTeX

Keys in ini files

(Under development.)

Many keys are related to the CLDR (Common Language Data Repository). Others are just the TeX primitives with the same name.

Keys may be further qualified in a particular language with a suffix starting with a uppercase letter. It can be just a letter (eg,, or a name. Multi-letter qualifiers starting with an uppercase letter are forward compatible in the sense they won’t conflict with new “global” keys (which start always with a lowercase case). There is an exception, however: the section counters has been devised to have arbitrary keys, so you can add lowercased keys if you want. Note the fact a qualifier starts with a uppercase letter doesn’t mean it must be preserved in the user interface (date and casing variants are examples).

Values may contain ; and #. ini files only considers comments lines starting with ;, at the beginning. So, ini parser must be configured accordingly.


Most of them are self explanatory.

charset The charset in the ini file (currently must be utf8).

version of the ini file

tag.bcp47 May includes if appropriate language, script and region. Usually only the language.

language.tag.bcp47 The language part.

script.tag.bcp47 The script part.

tag.bcp47.likely The likely full tag. See Likely Subtags (CLDR). It can be useful when exporting data to tools expecting a full BCP 47 tag.

tag.opentype If different from the BCP 47 tag., like, for example, Cyrillic.

script.tag.opentype If different from the BCP 47 tag.

level ini files are based on a set of keys. The level is much a ‘version’ of the list of available keys. Currently is 1, and it will stay so until there is some significant change.

derivate Not yet used, but its purpose is to identify if the files is the original one distributed with babel or a derivate (for example, a publishing house may want to define its own files).

encodings A mostly informative field for 8-bit engines requiring font encodings (T1, LGR, etc.), but used when a language is loaded on the fly.


The default section defines the Unicode strings.

The .licr subsections are used in 8-bit engines, in pure ASCII using the LICR.

The final name is added by babel.


date.long fields are as in the CLDR, but the syntax is different. Anything inside brackets is a date field (eg, [MMMM] for the month name) and anything outside is text. In addition, [ ] is a non breakable space and [.] is an abbreviation dot.

Here are some explanations for dates:

For example, about narrow:

The narrow date fields are the shortest possible names (in terms of width in common fonts), and are not guaranteed to be unique. Think of what you might find on a credit-card-sized wallet or checkbook calendar, such as in English for days of the week:



frenchspacing (yes or no) Enable or disable \frenchspacing

hyphenrules As named in language.dat.

lefthyphenmin \lefthyphenmin

righthyphenmin \righthyphenmin

hyphenchar The hyphenation char (number). Empty for the default. 0 if there is no hyphen (eg, Thai).

prehyphenchar Not yet used (luatex).

posthyphenchar Not yet used (luatex).

exhyphenchar Not yet used (luatex)

preexhyphenchar Not yet used (luatex)

postexhyphenchar Not yet used (luatex)

hyphenationmin Not yet used (luatex), but it will be soon.

hyphenate.other.locale (Tentative syntax.) A few hyphenation patterns require setting some chars to other. This one is based on the language.

hyphenate.other.script (Tentative syntax.) Same, based on the script.

linebreaking The line breaking mode, with a letter: h(yphenated, by default), c(jk), s(outheast Asian), u(nhyphenated).


Under development:


See the CLDR. For example Exemplar Characters, can help to recognize a language. This list and the punctuation list are currently not used by babel.


See Numering systems

The section about numbers may be used by some package to format numbers (or even babel itself in a future). They reflect local tradicional usage, not the international one set by either the SI or ISO 80000.




See What’s new in babel 3.56