Language Definition

From Documentation
Revision as of 04:03, 19 January 2024 by Matthieu (talk | contribs)


Language Definition



This section describes what a language definition and addon are. It is required for component development. However, you could skip it if you won't develop components. For more information about component development, please refer to ZK Component Development Essentials.

If you would like to change the default configuration of a ZK application, please refer to ZK Developer's Reference: Packing Code.


Language Definition

A language definition defines a component set (aka., a language). For example, ZUL and XHTML are two component sets.

To define a language definition, you have to prepare a file called /metainfo/zk/lang.xml and make it available to the classpath (such as in a JAR file, or in WEB-INF/classes of a Web application). In addition, you could specify them in /metainfo/zk/config.xml in the classpath. (parsed by org.zkoss.zk.ui.metainfo.DefinitionLoaders)

Language Addon

A language addon is used to extend a language definition. You need to include it in one of the following ways:

  • Load by path convention at /WEB-INF/classes/metainfo/zk/lang-addon.xml in a WAR, available to the classpath. In jar, mymodule.jar/metainfo/zk/lang-addon.xml. The filename must be the same as specified.
  • specified the file path with <language-config> in zk.xml (in a Web application)
  • specified the file path in /metainfo/zk/config.xml (in a JAR file; classpath).


When ZK starts, it will parse all language definitions and then all language add-ons based on their dependency. A language addon is a variant of a language definition. They are almost the same, except for the naming and it must specify the <addon-name>.

DOCTYPE restriction

Since 10.0.0

Starting from ZK 10, the xml parser used by ZK declares disallow-doctype-decl to true. This prevents the use of DOCTYPE declaration in xml files, such as zk.xml, lang-addon.xml, config. xml, etc. This is a security measure to prevent XXE attacks using <!DOCTYPE ...> as vector.




Last Update : 2024/01/19

Copyright © Potix Corporation. This article is licensed under GNU Free Documentation License.