<?xml version="1.0" standalone="no"?>
<!DOCTYPE s1 SYSTEM "../../style/dtd/document.dtd">
<!--
 * 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.
-->
<!-- $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>
