<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<html>

<head>
<meta http-equiv="Content-Language" content="en-us">
<link rel="stylesheet" type="text/css" href="../stylesheets/style.css">
<title>Translate Task</title>
</head>

<body>

<h2><a name="translate">Translate</a></h2>
<h3>Description</h3>
<p>Identifies keys in files delimited by special tokens
and translates them with values read from resource bundles.
</p>
<p>
A resource bundle contains locale-specific key-value pairs.
A resource bundle is a hierarchical set of property files.
A bundle name makes up its base family name.  Each file that
makes up this bundle has this name plus its locale.  For example,
if the resource bundle name is MyResources, the file that contains
German text will take the name MyResources_de.  In addition to
language, country and variant are also used to form the files in
the bundle.
</p>
<p>
The resource bundle lookup searches for resource files with various
suffixes on the basis of (1) the desired locale and (2) the default
locale (basebundlename), in the following order from lower-level
(more specific) to parent-level (less specific):
</p>
<pre>
basebundlename + &quot;_&quot; + language1 + &quot;_&quot; + country1 + &quot;_&quot; + variant1
basebundlename + &quot;_&quot; + language1 + &quot;_&quot; + country1
basebundlename + &quot;_&quot; + language1
basebundlename
basebundlename + &quot;_&quot; + language2 + &quot;_&quot; + country2 + &quot;_&quot; + variant2
basebundlename + &quot;_&quot; + language2 + &quot;_&quot; + country2
basebundlename + &quot;_&quot; + language2
</pre>
<p>
The file names generated thus are appended with the string &quot;.properties&quot;
to make up the file names that are to be used.
</p>
<p>
File encoding is supported.  The encoding scheme of the source files,
destination files and the bundle files can be specified.

Destination files can be explicitly overwritten using the
<var>forceoverwrite</var> attribute.  If <var>forceoverwrite</var>
is false, the destination file is overwritten only if either the
source file or any of the files that make up the bundle have been
modified after the destination file was last modified.
</p>
<p>
<em>New in Apache Ant 1.6:</em><br>
Line endings of source files are preserved in the translated files.
</p>
<p><a href="../Types/fileset.html">FileSet</a>s are used to select files to
translate.
</p>
<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
  <tr>
    <td valign="top"><b>Attribute</b></td>
    <td valign="top"><b>Description</b></td>
    <td align="center" valign="top"><b>Required</b></td>
  </tr>
  <tr>
    <td valign="top">todir</td>
    <td valign="top">Destination directory where destination files are
      to be created.</td>
    <td valign="top" align="center">Yes</td>
  </tr>
  <tr>
    <td valign="top">starttoken</td>
    <td valign="top">The starting token to identify keys.</td>
    <td valign="top" align="center">Yes</td>
  </tr>
  <tr>
    <td valign="top">endtoken</td>
    <td valign="top">The ending token to identify keys.</td>
    <td valign="top" align="center">Yes</td>
  </tr>
  <tr>
    <td valign="top">bundle</td>
    <td valign="top">Family name of resource bundle.</td>
    <td valign="top" align="center">Yes</td>
  </tr>
  <tr>
    <td valign="top">bundlelanguage</td>
    <td valign="top">
        Locale specific language of resource bundle.  Defaults to
        default locale's language.
    </td>
    <td valign="top" align="center">No</td>
  </tr>
  <tr>
    <td valign="top">bundlecountry</td>
    <td valign="top">
        Locale specific country of resource bundle.  Defaults to
        default locale's country.
    </td>
    <td valign="top" align="center">No</td>
  </tr>
  <tr>
    <td valign="top">bundlevariant</td>
    <td valign="top">
        Locale specific variant of resource bundle.  Defaults to
        the default variant of the country and language being used.
    </td>
    <td valign="top" align="center">No</td>
  </tr>
  <tr>
    <td valign="top">srcencoding</td>
    <td valign="top">Source file encoding scheme.  Defaults to
    system default file encoding.</td>
    <td valign="top" align="center">No</td>
  </tr>
  <tr>
    <td valign="top">destencoding</td>
    <td valign="top">Destination file encoding scheme.  Defaults to
    source file encoding.</td>
    <td valign="top" align="center">No</td>
  </tr>
  <tr>
    <td valign="top">bundleencoding</td>
    <td valign="top">Resource Bundle file encoding scheme.  Defaults to
    source file encoding.</td>
    <td valign="top" align="center">No</td>
  </tr>
  <tr>
    <td valign="top">forceoverwrite</td>
    <td valign="top">Overwrite existing files even if the destination
      files are newer. Defaults to &quot;no&quot;.</td>
    <td valign="top" align="center">No</td>
  </tr>
</table>
<h3>Parameters specified as nested elements</h3>

<h4>fileset</h4>
 <p><a href="../Types/fileset.html">FileSets</a> are used to select files that
 contain keys for which value translated files are to be generated.
</p>
<h3>Examples</h3>
<p><b>Translate source file encoded in english into its japanese
equivalent using a resource bundle encoded in japanese.
</b></p>
<pre>
  &lt;translate toDir=&quot;$(dest.dir}/ja&quot;
        starttoken=&quot;#&quot;
        endtoken=&quot;#&quot;
        bundle=&quot;resource/BaseResource&quot;
        bundlelanguage=&quot;ja&quot;
        forceoverwrite=&quot;yes&quot;
        srcencoding=&quot;ISO8859_1&quot;
        destencoding=&quot;SJIS&quot;
        bundleencoding=&quot;SJIS&quot;&gt;
        &lt;fileset dir=&quot;${src.dir}&quot;&gt;
            &lt;include name=&quot;**/*.jsp&quot;/&gt;
        &lt;/fileset&gt;
  &lt;/translate&gt;
</pre>

</body>
</html>
