Mulitilingual Document handling
Introduction
Mulitilingual Document handling deals with documents of different languages. This affects virtually every part of Lenya, namely many aspects of work flow such as creation, publication, deactivation, deletion. It also affects access control, meta data, etc.
The multilingual capabilities are not a mandatory feature of
      Lenya. You can easily create monolingual publication by simply
      replacing a few properties in
      publication.xconf.
The multilingual capabilities are deeply ingrained in the core of Lenya and as such a conceptual overview has to delve into many areas of Lenya. The main parts of the multilingual capabilities are as follows:
- Site tree
 - The site
	tree contains information about documents. It has been
	expanded to also contain information about different language
	versions of the same document. Different language versions of
	the same document share the same
	
document-id. - Default language
 - A publication has a default language. This is the language
	in which the document is created. However it is not
	necessarily the case that there is always a document version
	in the default language as the user is allowed to remove any
	language version even the one for the default language.
If you specify an URL without a language suffix you are redirected to the default language document. - publication.xconf
 - This is where the available languages and the default language are specified.
 - page-envelope
 - The page envelope exports document specific information such as document-id via an input module. Naturally language specific information for the current document is also available via the page envelope.
 - Redirection
 - If you request a document 
foo.htmlin a multilingual publication you will internally be redirected tofoo_en.htmlif "en" is the default language. - Special cases
 - Some special care has to be taken when removing language versions. The current implementation does not allow the user to remove all language versions of a document. There always has to be at least one language version.
 
Implementation
Site tree
The site tree contains nodes for each document. Each node
	can contain multiple label nodes for each
	language version of the document.
<node id="doctypes"> <label xml:lang="de">Dokumenttypen</label> <label xml:lang="en">Document types</label> <node id="1column"> <label xml:lang="de">1 Spalte</label> </node> </node>
The classe SiteTree and
	SiteTreeNode provide interfaces to the nodes and
	the corresponding label nodes.
publication.xconf
The languages node in
	publication.xconf defines the languages that are
	available for this publication and also defines the default language.
<languages> <language default="true">de</language> <language>en</language> </languages>
This information is available via the
	Publication class
	(getDefaultLanguage() and
	getLanguages() methods).
page-envelope
The page-envelope
	input module exports language related information,
	namely default-language,
	document-label, document-language,
	document-languages and
	document-languages-csv.
Redirection
The DefaultDocumentBuilder which implements the
	DocumentBuilder interface, takes care of
	redirecting language agnostic URLs (such as
	foo.html) to language aware links
	(foo_en.html), i.e. language agnostic links are
	redirected to the language aware link with the default language.
Addition and removal
More language versions are added with the "Create new
	language version" screen. Existing language versions can be
	removed with the "Remove Language" screen. These screens are
	generated by create-language.xsp,
	create-language.xsl, removelabel.xsp
	and removelabel.xsl.
The creation of a new language version is done via the
	create-language target which uses the
	InsertLabelTask ant task to insert a label in the
	site tree.
The removal of a language version is done via the
	remove-language target, which uses the
	RemoveLabelTask ant task (which removes the label
	from the site tree).
Involved classes, XSPs and XSLTs
The following classes, XSPs and XSLTs are involved in multilingual document handling:
- org.apache.lenya.cms.publication.SiteTree and org.apache.lenya.cms.publication.SiteTreeNode
 - These interfaces provide acces to the label nodes.
 - org.apache.lenya.cms.publication.Publication
 - Provides access to the default language and to all available languages.
 - org.apache.lenya.cms.publication.PageEnvelope
 - Exports language related information such as
	
default-language,document-language, etc. - org.apache.lenya.cms.publication.DefaultDocumentBuilder
 - Builds a document with the given language. The default
	implementation also takes care of redirecting
	
foo.htmltofoo_en.html. - $publication-id/lenya/content/authoring/create-language.xsp, $publication-id/lenya/xslt/authoring/create-language.xsl
 - Generate the "Create new language version" screen.
 - src/webapp/lenya/content/authoring/removelabel.xsp, src/webapp/lenya/xslt/authoring/removelabel.xsl
 - Generate the "Remove Language" screen.
 - org.apache.lenya.cms.ant.InsertLabelTask
 - Ant task to add a label to the site tree.
 - org.apache.lenya.cms.ant.RemoveLabelTask
 - Ant task to remove a label from the site tree.
 - $publication-id/config/tasks/targets.xml
 - Defines the 
create-languageand theremove-languagetarget which handle the addition and removal of language versions of a document. 
