This function tests whether the language of $node, or the context item if
the second argument is omitted, as specified by xml:lang attributes is the
same as, or is a sublanguage of, the language specified by $testlang.
fn:lang( $testlang as xs:string?xs:booleanfn:lang( $testlang as xs:string?,$node as node()xs:booleanThe behavior of the function if the second argument is omitted is exactly the same as if
the context item (.) had been passed as the second argument.
The language of the argument $node, or the context item if the second
argument is omitted, is determined by the value of the xml:lang attribute
on the node, or, if the node has no such attribute, by the value of the
xml:lang attribute on the nearest ancestor of the node that has an
xml:lang attribute. If there is no such ancestor, then the function
returns false.
If $testlang is the empty sequence it is interpreted as the zero-length
string.
The relevant xml:lang attribute is determined by the value of the XPath
expression:
(ancestor-or-self::*/@xml:lang)[last()]
If this expression returns an empty sequence, the function returns false.
Otherwise, the function returns true if and only if, based on a caseless
default match as specified in section 3.13 of , either:
$testlang is equal to the string-value of the relevant
xml:lang attribute, or
$testlang is equal to some substring of the string-value of the
relevant xml:lang attribute that starts at the start of the
string-value and ends immediately before a hyphen, "-" (the character "-" is
HYPHEN-MINUS, #x002D).
The expression fn:lang("en") would return true if the
context node were any of the following four elements:
<para xml:lang="en"/>
<div xml:lang="en"><para>And now, and
forever!</para></div>
<para xml:lang="EN"/>
<para xml:lang="en-us"/>
The expression fn:lang("fr") would return false if the
context node were <para xml:lang="EN"/>
The following errors may be raised when $arg is omitted:
If the context item is absent, dynamic error
If the context item is not a node, type error .