<?xml version="1.0" standalone="no"?>
<!DOCTYPE s1 SYSTEM "../../style/dtd/document.dtd">
<!--
 * Copyright 2001-2004 The Apache Software Foundation.
 *
 * Licensed 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.
-->
<!-- $Id$ -->
  <s1 title="lang() function">

  <ul>
    <li><link anchor="functionality">Functionality</link></li>
    <li><link anchor="implementation">Implementation</link></li>    
  </ul>
  <anchor name="functionality"/>
  <s2 title="Functionality">

  <p>The <code>xml:lang</code> can be used to determine the language for a node or
  a node-set. The attribute can be used to store language-specific data in an
  XML document:</p>

  <source>
    &lt;phrases&gt;
      &lt;greeting xml:lang="en"&gt;Hello!&lt;/greeting&gt;
      &lt;greeting xml:lang="no"&gt;Hei!&lt;/greeting&gt;
      &lt;greeting xml:lang="fr"&gt;Salut!&lt;/greeting&gt;
      &lt;greeting xml:lang="es"&gt;Hola!&lt;/greeting&gt;
      &lt;greeting xml:lang="de"&gt;Sweinhund!&lt;/greeting&gt;
    &lt;/phrases&gt;
  </source>

  <p>The XSL stylesheet can use the <code>lang()</code> function to select the
  element with the desired language:</p>

  <source>
    &lt;xsl:template match="greeting"&gt;
      &lt;xsl:if test="lang("de")&gt;
        &lt;xsl:value-of select="."/&gt;
        &lt;xsl:text&gt; Grossglucklicher wunche!&lt;/xsl:text&gt;
      &lt;/xsl:if&gt;
    &lt;/xsl:template&gt;
  </source>
</s2> <anchor name="implementation"/>
<s2 title="Implementation">

  <p>The DOM interface has been given a method that returns the language for
  a given node. The language is returned as a string (on whatever format is
  used in the XML document - should be iso), and may be null if no language is
  defined.</p>

  <source>
    public String DOM.getLanguage(int node);
  </source>

  <p>The BasisLibrary class has a static method that will compare the language
  of the context node with some other language and return the result as a
  boolean.</p>

  <source>
    public static boolean BasisLibrary.testLanguage(String language, DOM dom, int node);
  </source>

  <p>The compiled code for the <code>lang()</code> method calls this method in the
  BasisLibrary and leaves the result on the stack for the calling element.</p>
  </s2>
</s1>
