Hello,

In order to display with dynamic forrest (started with forrest run)
a page with a text corresponding to the language of the preference
of the browser of the user, I did the following modifications.
This only concerns the page, not the menu or the tabs.
The basic idea is to
- modify the DTD to introduce an element tt which
surround the text to be translated.
- to translate this element in i18:text element with an xslt stylesheet
- apply the i18n transformation to translate.

Note
In the examples
forrest is      in D:\DATA\apache\apache-forrest-0.7
forrest site is in D:\DATA\apache\apache-forrest-0.7-paul-site

A) I create a new DTD document-v21.dtd with a new module
document-v21.mod
in directory
D:\DATA\apache\apache-forrest-0.7\main\webapp\resources\schema\dtd\

The document-v21.dtd is

<!ENTITY % common-charents PUBLIC
    "-//APACHE//ENTITIES Common Character Entity Sets V1.0//EN"
    "common-charents-v10.mod">
%common-charents;

<!-- =============================================================== -->
<!-- Document -->
<!-- =============================================================== -->

<!ENTITY % document PUBLIC
    "-//APACHE//ENTITIES Documentation V2.1//EN"
    "document-v21.mod">
%document;


Note
Only the two lines are different from document-v20.dtd
    "-//APACHE//ENTITIES Documentation V2.1//EN"
    "document-v21.mod">


in directory
D:\DATA\apache\apache-forrest-0.7\main\webapp\resources\schema\dtd\
The document document-v21.mod is a copy of document-v20.mod
with differences given hereafter

1) The line
<!ENTITY % text "#PCDATA">
becomes
<!-- <!ENTITY % text "#PCDATA"> -->
This line is put in comment

2) The folowing lines are added after
<!ENTITY % simpletext "#PCDATA">
<!ENTITY % text "simpletext|tt">

3) before the lines
<!-- ==================================================== -->
<!-- Body -->
<!-- ==================================================== -->

add

<!--   tt text to translate -->
<!ELEMENT tt (%simpletext;)>




The basic idea is to surround text to be translated with the tt element.


B) A new stylesheet i18ntext.xsl to replace <tt> by <i18n:text>
in directory D:\DATA\apache\apache-forrest-0.7\main\webapp\resources\stylesheets

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:i18n="http://apache.org/cocoon/i18n/2.1" >

  <xsl:import href="copyover.xsl"/>
  <xsl:template match="tt">
     <i18n:text>
     <xsl:apply-templates select="@*"/>
     <xsl:apply-templates />
     </i18n:text>
  </xsl:template>
</xsl:stylesheet>

C) Modify the sitemap.xmap in order to do the two modifications
   (markup modification and translation) for html page and pdf page
in directory
D:\DATA\apache\apache-forrest-0.7\main\webapp

After the lines
      <map:match pattern="**body-*.html">
        <map:generate src="cocoon:/{1}{2}.xml"/>
        <map:transform type="idgen"/>
        <map:transform type="xinclude"/>

Add the lines
 <!-- paul begin -->      
        <map:select type="config">
          <map:parameter name="value" value="{defaults:i18n}"/>
          <map:when test="true">
            <map:transform src="{forrest:stylesheets}/i18ntext.xsl"/>        
            <map:transform type="i18n">
              <map:parameter name="locale" value="{request:locale}"/>
            </map:transform>
                </map:when>
        </map:select>
<!-- paul end -->        

and after the lines
      <map:match type="regexp" pattern="^(.*?)([^/]*).fo$">
        <map:select type="exists">
          <map:when test="{project:content.xdocs}{1}{2}.fo">
            <map:generate src="{project:content.xdocs}{1}{2}.fo"/>
          </map:when>
          <map:otherwise>
            <map:aggregate element="site">
              <map:part src="cocoon:/skinconf.xml"/>
              <map:part src="cocoon:/{1}{2}.xml"/>
            </map:aggregate>
            <!-- <map:transform type="idgen"/> -->
            <map:transform type="xinclude"/>

add the lines
<!-- paul begin -->      
        <map:select type="config">
          <map:parameter name="value" value="{defaults:i18n}"/>
          <map:when test="true">
            <map:transform src="{forrest:stylesheets}/i18ntext.xsl"/>        
            <map:transform type="i18n">
              <map:parameter name="locale" value="{request:locale}"/>
            </map:transform>
                </map:when>
        </map:select>
<!-- paul end -->    

D) in the pdf plugin  output.xmap we inverse the presence test
to solve a problem of cache (this is a workaround)
(the cache does not recognise that the language has changed, so it
displays the same page)
in the directory
D:\DATA\apache\apache-forrest-0.7\build\plugins\org.apache.forrest.plugin.output.pdf\

After the lines
  <map:pipelines>
    <map:pipeline>
      <!-- generate .pdf files from .fo -->
      <map:match type="regexp" pattern="^(.*?)([^/]*).pdf$">
        <map:select type="exists">
put in comment the lines
<!--
          <map:when test="{project:content.xdocs}/{1}{2}.pdf">
            <map:read src="{project:content.xdocs}/{1}{2}.pdf"/>
          </map:when>
          <map:otherwise>
            <map:generate src="cocoon://{1}{2}.fo"/>
            <map:serialize type="fo2pdf"/>
          </map:otherwise>
-->
and after add the lines
<!-- paul begin -->
          <map:when test="cocoon://{1}{2}.xml">
            <map:generate src="cocoon://{1}{2}.fo"/>
            <map:serialize type="fo2pdf"/>
          </map:when>
          <map:otherwise>
            <map:select type="exists">
              <map:when test="{project:content.xdocs}/{1}{2}.pdf">
                <map:read src="{project:content.xdocs}/{1}{2}.pdf"/>
              </map:when>        
            </map:select>
          </map:otherwise>
<!-- paul end   -->

E) In forrest.xmap in D:\DATA\apache\apache-forrest-0.7\main\webapp
In order to catch the new DTD.
After the lines    
        <sourcetype name="document-v20">
          <document-declaration public-id="-//APACHE//DTD Documentation V2.0//EN" />
        </sourcetype>
Add the lines
<!-- add paul begin -->
        <sourcetype name="document-v21">
          <document-declaration public-id="-//APACHE//DTD Documentation V2.1//EN" />
        </sourcetype>
<!-- add paul end -->
       
Afer the lines
          <map:when test="document-v20">
            <map:transform src="{forrest:stylesheets}/docv20todocv13.xsl" />
          </map:when>
Add the lines
<!-- add paul begin -->
          <map:when test="document-v21">
            <map:transform src="{forrest:stylesheets}/docv20todocv13.xsl" />
          </map:when>
<!-- add paul end -->

F) in D:\DATA\apache\apache-forrest-0.7\main\webapp\skins\common\translations
fill catalogs CommonMessages_xx.xml with in the languages you want.
For the example
I use CommonMessages_en_US.xml and CommonMessages_fr.xml
with already translated "Search".
  <message key="Search">Rechercher</message>


G) Put in your page the new DOCTYPE and the text to translate in <tt> markup.
Exemple indexi.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V2.1//EN" "http://forrest.apache.org/dtd/document-v21.dtd">
<document>
  <header>
    <title><tt>Search</tt></title>
  </header>
  <body>
    <section id="overview">
      <title><tt>Search</tt></title>
      <p><tt>Search</tt>
     </p>
    </section>
  </body>
</document>


H) Update Catalog of forrest
In D:\DATA\apache\apache-forrest-0.7\main\webapp\resources\schema\catalog.forrest
After the line
-- Document Type Definitions --

add the line
PUBLIC "-//APACHE//DTD Documentation V2.1//EN"
       "dtd/document-v21.dtd"



I) In forrest.properties of the site put the indicator to true
Example
D:\DATA\apache\apache-forrest-0.7-paul-site

project.i18n=true

J) In the directory of your site start the site with command "forrest run"

Example
cd D:\DATA\apache\apache-forrest-0.7-paul-site
SET JAVA_HOME=C:\java\j2sdk1.4.2_03
set FOREST_HOME=C:\apache\apache-forrest-0.7
set PATH=%PATH%;%FOREST_HOME%\bin
forrest run

K) To look at the results

- With your favorit browser put your language preferences to
english  en_US  
(tool/internet option/language ..)

http://localhost:8888/indexi.html
You can see "Search"


- With your favorit browser put your language preferences to german de

http://localhost:8888/indexi.html
You can see "Suche"

- With your favorit browser put your language preferences to french fr

http://localhost:8888/indexi.html
You can see "Rechercher"


Note
For the tab and the menu
Catalogues of the language should be define
D:\DATA\apache\apache-forrest-0.7-paul-site\src\documentation\translations
langcode.xml

menu_de.xml menu_fr.xml the menu_lang file should exist

Restrictions
 - The research function in the site is looking at the text in the page
   Only the basic langague is seen, not the translations. Some work is
   needed to add to the index the text of each language.
 - The other tags of i18n like "if" are not taken into account.
 - To inform the user of the multi language possibilities
   a new skin should be done.
 - Only document-v20.dtd can be translated all the other formats cannot.


A question:  
If you change the language, the PDF is not modifed and if you clic on the PDF icon you can see always the same pdf file..


Paul