]> granicus.if.org Git - docbook-dsssl/commitdiff
Make language codes RFC compliant (closes #1208931; thanks to
authorMichael Smith <xmldoc@users.sourceforge.net>
Thu, 26 May 2005 23:29:25 +0000 (23:29 +0000)
committerMichael Smith <xmldoc@users.sourceforge.net>
Thu, 26 May 2005 23:29:25 +0000 (23:29 +0000)
Bernd Groh for reporting).

::PROBLEM:
  Stylesheets output two-part language codes in the form "zh_CN".
  But underscores in language codes are actually neither RFC
  compliant nor compliant with the HTML 4.0 rec. The separator
  should be a hyphen. To quote the specs:

    Section 8.1.1, "Language Codes"[1], in the HTML 4.0 Rec.
    states that:

    [RFC1766] defines and explains the language codes that MUST be
    used in HTML documents.

    Briefly, language codes consist of a primary code and a
    possibly empty series of subcodes:

      language-code = primary-code ( "-" subcode )*

    And in RFC 1766, "Tags for the Identification of
    Languages"[2], the EBNF for "language tag" is given as:

      Language-Tag = Primary-tag *( "-" Subtag )
      Primary-tag = 1*8ALPHA
      Subtag = 1*8ALPHA

    [1] http://www.w3.org/TR/REC-html40/struct/dirlang.html#h-8.1.1
    [2] http://www.ietf.org/rfc/rfc1766.txt

::CAUSE:
  Stylesheets simply pass through language codes unaltered. So if
  users put "zh_CN" in their source, they will get "zh_CN" in
  their HTML output.

::FIX:
  Added a new boolean config parameter, "l10n.lang.value.rfc.compliant",
  set to 1 by default. If it is non-zero, any underscore in a
  language code will be converted to a hyphen in HTML output. If
  it is zero, the language code will be left as-is.

::AFFECTS:
  This change affects any HTML output that contains two-part
  language codes.

xsl/common/l10n.xsl
xsl/html/param.ent
xsl/html/param.xweb
xsl/params/l10n.lang.value.rfc.compliant.xml [new file with mode: 0644]

index 743b1868de1b3cf14c3300261cbceea40c79f6d0..2e2cdfd0eca63267215fa13756cbd8f7e9a74b4f 100644 (file)
 
   <xsl:if test="$language != ''">
     <xsl:attribute name="lang">
-      <xsl:value-of select="$language"/>
+      <xsl:choose>
+        <xsl:when test="$l10n.lang.value.rfc.compliant != 0">
+          <xsl:value-of select="translate($language, '_', '-')"/>
+        </xsl:when>
+        <xsl:otherwise>
+          <xsl:value-of select="$language"/>
+        </xsl:otherwise>
+      </xsl:choose>
     </xsl:attribute>
   </xsl:if>
 
index a331164f5312a154cd12e4bb0b96121b4c806f0d..ed439721246147b54752f5ac017ab777ade7eb98 100644 (file)
 <!ENTITY l10n.gentext.language SYSTEM "../params/l10n.gentext.language.xml">
 <!ENTITY l10n.gentext.default.language SYSTEM "../params/l10n.gentext.default.language.xml">
 <!ENTITY l10n.gentext.use.xref.language SYSTEM "../params/l10n.gentext.use.xref.language.xml">
+<!ENTITY l10n.lang.value.rfc.compliant SYSTEM "../params/l10n.lang.value.rfc.compliant.xml">
 <!ENTITY default.image.width SYSTEM "../params/default.image.width.xml">
 <!ENTITY default.float.class SYSTEM "../params/default.float.class.xml">
 <!ENTITY funcsynopsis.tabular.threshold SYSTEM "../params/funcsynopsis.tabular.threshold.xml">
index 9d412236e6b39b0fee983e19177f2800d746be6f..f31d37ca5e1aa40a2599c93a86834bbd4d0cd1d1 100644 (file)
@@ -406,6 +406,7 @@ url="http://docbook.sourceforge.net/projects/xsl/doc/tools/profiling.html">http:
 &l10n.gentext.language;
 &l10n.gentext.default.language;
 &l10n.gentext.use.xref.language;
+&l10n.lang.value.rfc.compliant;
 </reference>
 
 <appendix><title>The Stylesheet</title>
@@ -575,6 +576,7 @@ around all these parameters.</para>
 <src:fragref linkend="l10n.gentext.default.language.frag"/>
 <src:fragref linkend="l10n.gentext.language.frag"/>
 <src:fragref linkend="l10n.gentext.use.xref.language.frag"/>
+<src:fragref linkend="l10n.lang.value.rfc.compliant.frag"/>
 <src:fragref linkend="label.from.part.frag"/>
 <src:fragref linkend="linenumbering.everyNth.frag"/>
 <src:fragref linkend="linenumbering.extension.frag"/>
diff --git a/xsl/params/l10n.lang.value.rfc.compliant.xml b/xsl/params/l10n.lang.value.rfc.compliant.xml
new file mode 100644 (file)
index 0000000..8168d48
--- /dev/null
@@ -0,0 +1,60 @@
+<refentry id="l10n.lang.value.rfc.compliant">
+<refmeta>
+<refentrytitle>l10n.lang.value.rfc.compliant</refentrytitle>
+<refmiscinfo role="type">boolean</refmiscinfo>
+</refmeta>
+<refnamediv>
+<refname>l10n.lang.value.rfc.compliant</refname>
+<refpurpose>Make value of lang attribute RFC compliant?</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+<src:fragment id='l10n.lang.value.rfc.compliant.frag'>
+<xsl:param name="l10n.lang.value.rfc.compliant" select="1"/>
+</src:fragment>
+</refsynopsisdiv>
+
+<refsect1><title>Description</title>
+
+<para>If non-zero, ensure that the values for all <sgmltag
+class="attribute">lang</sgmltag> attributes in HTML output are RFC
+compliant<footnote
+
+><para>Section 8.1.1, <ulink
+url="http://www.w3.org/TR/REC-html40/struct/dirlang.html#h-8.1.1"
+>Language Codes</ulink>, in the HTML 4.0 Recommendation states that:
+
+<blockquote><para>[RFC1766] defines and explains the language codes
+that must be used in HTML documents.</para>
+<para>Briefly, language codes consist of a primary code and a possibly
+empty series of subcodes:
+
+<literallayout class="monospaced">language-code = primary-code ( "-" subcode )*</literallayout>
+</para>
+<para>And in RFC 1766, <ulink
+url="http://www.ietf.org/rfc/rfc1766.txt">Tags for the Identification
+of Languages</ulink>, the EBNF for "language tag" is given as:
+
+<literallayout class="monospaced">Language-Tag = Primary-tag *( "-" Subtag )
+Primary-tag = 1*8ALPHA
+Subtag = 1*8ALPHA</literallayout>
+</para>
+</blockquote>
+</para></footnote>.
+
+by taking any underscore characters in any <sgmltag
+class="attribute">lang</sgmltag> values found in source documents, and
+replacing them with hyphen characters in output HTML files. For
+example, <literal>zh_CN</literal> in a source document becomes
+<literal>zh-CN</literal> in the HTML output form that source.
+
+<note>
+<para>This parameter does not cause any case change in <sgmltag
+class="attribute">lang</sgmltag> values, because RFC 1766
+explicitly states that all "language tags" (as it calls them) "are
+to be treated as case insensitive".</para>
+</note>
+</para>
+
+</refsect1>
+</refentry>