[0001]
[0002]
[0003]
[0004]
[0005]
[0006]
[0007]
[0008]
[0009]
[0010]
[0011]
[0012]
[0013]
[0014]
[0015]
[0016]
[0017]
[0018]
[0019]
[0020]
[0021]
[0022]
[0023]
[0024]
[0025]
[0026]
[0027]
[0028]
[0029]
[0030]
[0031]
[0032]
[0033]
[0034]
[0035]
[0036]
[0037]
[0038]
[0039]
[0040]
[0041]
[0042]
[0043]
[0044]
[0045]
[0046]
[0047]
[0048]
[0049]
[0050]
[0051]
[0052]
[0053]
[0054]
[0055]
[0056]
[0057]
[0058]
[0059]
[0060]
[0061]
[0062]
[0063]
[0064]
[0065]
[0066]
[0067]
[0068]
[0069]
[0070]
[0071]
[0072]
[0073]
[0074]
[0075]
[0076]
[0077]
[0078]
[0079]
[0080]
[0081]
[0082]
[0083]
[0084]
[0085]
[0086]
[0087]
[0088]
[0089]
[0090]
[0091]
[0092]
[0093]
[0094]
[0095]
[0096]
[0097]
[0098]
[0099]
[0100]
[0101]
[0102]
[0103]
[0104]
[0105]
[0106]
[0107]
[0108]
[0109]
[0110]
[0111]
[0112]
[0113]
[0114]
[0115]
[0116]
[0117]
[0118]
[0119]
[0120]
[0121]
[0122]
[0123]
[0124]
[0125]
[0126]
[0127]
[0128]
[0129]
[0130]
[0131]
[0132]
[0133]
[0134]
[0135]
[0136]
[0137]
[0138]
[0139]
[0140]
[0141]
[0142]
[0143]
[0144]
[0145]
[0146]
[0147]
[0148]
[0149]
[0150]
[0151]
[0152]
[0153]
[0154]
[0155]
[0156]
[0157]
[0158]
[0159]
[0160]
[0161]
[0162]
[0163]
[0164]
[0165]
[0166]
[0167]
[0168]
[0169]
[0170]
[0171]
[0172]
[0173]
[0174]
[0175]
[0176]
[0177]
[0178]
[0179]
[0180]
[0181]
[0182]
[0183]
[0184]
[0185]
[0186]
[0187]
[0188]
[0189]
[0190]
[0191]
[0192]
[0193]
[0194]
[0195]
[0196]
[0197]
[0198]
[0199]
[0200]
[0201]
[0202]
[0203]
[0204]
[0205]
[0206]
[0207]
[0208]
[0209]
[0210]
[0211]
[0212]
[0213]
[0214]
[0215]
[0216]
[0217]
[0218]
[0219]
[0220]
[0221]
[0222]
[0223]
[0224]
[0225]
[0226]
[0227]
[0228]
[0229]
[0230]
[0231]
[0232]
[0233]
[0234]
[0235]
[0236]
[0237]
[0238]
[0239]
[0240]
[0241]
[0242]
[0243]
[0244]
[0245]
[0246]
[0247]
[0248]
[0249]
[0250]
[0251]
[0252]
[0253]
[0254]
[0255]
[0256]
[0257]
[0258]
[0259]
[0260]
[0261]
[0262]
[0263]
[0264]
[0265]
[0266]
[0267]
[0268]
[0269]
[0270]
[0271]
[0272]
[0273]
[0274]
[0275]
[0276]
[0277]
[0278]
[0279]
[0280]
[0281]
[0282]
[0283]
[0284]
[0285]
[0286]
[0287]
[0288]
[0289]
[0290]
[0291]
[0292]
[0293]
[0294]
[0295]
[0296]
[0297]
[0298]
[0299]
[0300]
[0301]
[0302]
[0303]
[0304]
[0305]
[0306]
[0307]
[0308]
[0309]
[0310]
[0311]
[0312]
[0313]
[0314]
[0315]
[0316]
[0317]
[0318]
[0319]
[0320]
[0321]
[0322]
[0323]
[0324]
[0325]
[0326]
[0327]
[0328]
[0329]
[0330]
[0331]
[0332]
[0333]
[0334]
[0335]
[0336]
[0337]
[0338]
[0339]
[0340]
[0341]
[0342]
[0343]
[0344]
[0345]
[0346]
[0347]
[0348]
[0349]
[0350]
[0351]
[0352]
[0353]
[0354]
[0355]
[0356]
[0357]
[0358]
[0359]
[0360]
[0361]
[0362]
[0363]
[0364]
[0365]
[0366]
[0367]
[0368]
[0369]
[0370]
[0371]
[0372]
[0373]
[0374]
[0375]
[0376]
[0377]
[0378]
[0379]
[0380]
[0381]
[0382]
[0383]
[0384]
[0385]
[0386]
[0387]
[0388]
[0389]
[0390]
[0391]
[0392]
[0393]
[0394]
[0395]
[0396]
[0397]
[0398]
[0399]
[0400]
[0401]
[0402]
[0403]
[0404]
[0405]
[0406]
[0407]
[0408]
[0409]
[0410]
[0411]
[0412]
[0413]
[0414]
[0415]
[0416]
[0417]
[0418]
[0419]
[0420]
[0421]
[0422]
[0423]
[0424]
[0425]
[0426]
[0427]
[0428]
[0429]
[0430]
[0431]
[0432]
[0433]
[0434]
[0435]
[0436]
[0437]
[0438]
[0439]
[0440]
[0441]
[0442]
[0443]
[0444]
[0445]
[0446]
[0447]
[0448]
[0449]
[0450]
[0451]
[0452]
[0453]
[0454]
[0455]
[0456]
[0457]
[0458]
[0459]
[0460]
[0461]
[0462]
[0463]
[0464]
[0465]
[0466]
[0467]
[0468]
[0469]
[0470]
[0471]
[0472]
[0473]
[0474]
[0475]
[0476]
[0477]
[0478]
[0479]
[0480]
[0481]
[0482]
[0483]
[0484]
[0485]
[0486]
[0487]
[0488]
[0489]
[0490]
[0491]
[0492]
[0493]
[0494]
[0495]
[0496]
[0497]
[0498]
[0499]
[0500]
[0501]
[0502]
[0503]
[0504]
[0505]
[0506]
[0507]
[0508]
[0509]
[0510]
[0511]
[0512]
[0513]
[0514]
[0515]
[0516]
[0517]
[0518]
[0519]
[0520]
[0521]
[0522]
[0523]
[0524]
[0525]
[0526]
[0527]
[0528]
[0529]
[0530]
[0531]
[0532]
[0533]
[0534]
[0535]
[0536]
[0537]
[0538]
[0539]
[0540]
[0541]
[0542]
[0543]
[0544]
[0545]
[0546]
[0547]
[0548]
[0549]
[0550]
[0551]
[0552]
[0553]
[0554]
[0555]
[0556]
[0557]
[0558]
[0559]
[0560]
[0561]
[0562]
[0563]
[0564]
[0565]
[0566]
[0567]
[0568]
[0569]
[0570]
[0571]
[0572]
[0573]
<!DOCTYPE html>
<!-- WASDOC AXP-2.0.0 (CGILIB AXP-1.9.9) -->
<!-- wasDOC Copyright (C) 2019,2020 Mark G.Daniel - Apache-2.0 licenced -->
<!--  3-NOV-2021 02:50 -->
<noscript>NOTE: SOME FUNCTIONALITY EMPLOYS JAVASCRIPT</noscript>
<div id="erreport1" style="display:none;"></div>
<script>
function errorReport(string) {
   for (var cnt = 1; cnt <= 2; cnt++) {
      var err = document.getElementById('erreport'+cnt);
      err.style.display = 'block';
      err.innerHTML += string;
   }
}
</script>
<style type="text/css">
html { font-family: arial, verdana, sans-serif; font-size:12pt; margin:1em; }
h1 { font-size:124%; font-style:bold;
     margin-top:1em; margin-bottom:0.5em; }
h2 { font-size:120%; font-style:bold;
     margin-top:1.1em; margin-bottom:0.4em; }
h3 { font-size:116%; font-style:bold;
     margin-top:1.0em; margin-bottom:0.3em; }
h4 { font-size:112%; font-style:bold;
     margin-top:1.1em; margin-bottom:0.3em; }
h5 { font-size:112%; font-style:bold; 
     margin-top:1.1em; margin-bottom:0.3em; }
h6 { font-size:112%; font-style:bold; padding:0; margin:0; }

h1 .text { text-decoration:underline; }
h1 .numb { padding-right:0.8em; }
h1 .numb:empty { display:none; padding-right:0; }
h2 .numb { padding-right:0.8em; }
h2 .numb:empty { display:none; padding-right:0; }
h3 .numb { padding-right:0.8em; }
h3 .numb:empty { display:none; padding-right:0; }
h4 .numb { padding-right:0.8em; }
h4 .numb:empty { display:none; padding-right:0; }
h5 .numb { display:none; padding-right:0; }
h6 .numb { display:none; padding-right:0; }

kbd { font-family:monospace; }

noscript { font-size:1.2em; }

p { line-height:1.1em; margin-top:1em; margin-bottom:1em; }

.chunk { font-size:130%; text-decoration:underline; }
.head {}
.high {}
.bold { font-weight:bold; }
.center { text-align:center; }
.italic { font-style:italic; }
.left { text-align:left; }
.nowrap { white-space:nowrap; }
.prewrap { white-space:pre; }
.right { text-align:right; }
.strike { text-decoration:line-through; }
.under { text-decoration:underline; }

.backlight { background-color:#f2f2f2; }
.display0 { display:none; }

img { max-width:100%; }
.imglink { }

.link { }
.blank { }

.list { margin-bottom:1em; }
.list li { margin-top:0.5em; }
.list0 li { margin-top:0; }
.item {}

.tabl { border-collapse:collapse; text-align:left; margin:0.4em 2em 0.5em 2em; }
.tabu { border-collapse:collapse; text-align:right; margin:0.4em 2em 0.5em 2em; }

.tabr { vertical-align:top; }
.tabh { padding:0.2em 0 0 2em; margin:0; }
.tabd { padding:0.1em 0 0 2em; margin:0; }
.tabh:first-of-type, td:first-of-type { padding-left:0; }

.tabu .tabh,
.tabu .tabd { border:1px solid gray; padding:0.2em 0.3em 0.2em 0.3em; }
.tab0 { border:none; visibility:hidden; max-width:1em; 
        white-space:nowrap; overflow:hidden; }

.tabauto { margin-left:auto; margin-right:auto; }

.tabr:empty { height:0.2em; }
.tabu .tabh:empty, .tabu .tabd:empty { border:none; visibility:hidden; }

.error { font-size:110%; color:black; background-color:yellow;
         font-family:sans-serif; font-weight:bold; font-style:normal;
         width:95%; border:solid 1px gray; padding:0.5em 1em 0.5em 1em; }
.error::before { content:'\026a0\00a0'; }
.image { }
.page { width:98%; border:1px dashed gray; margin:1.5em 0 1.8em 0; }
.epage { width:98%; border:1px dashed black; margin:1.5em 0 1.8em 0; }
.monosp { font-family:monospace; }
.ppage { display:none; }
.simple { list-style-type:none; }
.valtop { vertical-align:top; }
.valmid { vertical-align:middle; }
.valbot { vertical-align:bottom; }

.code { border-style:solid; border-width:0 0 0 1px; padding-left:1em;
        font-family:monospace; white-space:pre; }
.block { }
.blockof { margin:0.4em 2em 0.5em 2em; }
.example { border-style:dashed; border-width:0 0 0 1px; padding-left:1em;
           margin-top:0.5em; margin-bottom:0.5em; white-space:pre; }
.indent { margin-left:2em; margin-right:2em; }
.noindent { margin-left:0; margin-right:0; }
.inblock { display:inline-block; }
.mono { white-space:pre; font-family:monospace; }
.note { margin:0.4em 2em 0.5em 2em; page-break-inside:avoid; }
.note h5 { margin-top:0 }
.note_hr { width:80%; border:1px solid gray; }
.prop { padding-left:1em; margin-top:0.5em; margin-bottom:0.5em; }
.quote { border-style:dashed; border-width:0 0 0 1px; padding-left:1em;
         margin-top:0.5em; margin-bottom:0.5em; }
.this { display:none; }

a:link,a:visited { color:black; text-decoration:none; }
a:hover,a:active { text-decoration:underline; }
a:focus { outline:0; } 

:target:before { content:''; display:block; height:0.1em; margin:-0.1em; }
a.link:link, a.link:visited,a.link:active 
{ color:midnightBlue; text-decoration:underline; text-decoration-style:solid; }

.TOC1cols1 { width:80%; max-width:80%; }
.TOC1cols2 { column-count:2; width:80%; max-width:80%; }
.TOC1cols3 { column-count:3; max-width:90%; max-width:90%; }
.TOC1cols4 { column-count:4; max-width:100%; max-width:100%; }
.TOC1table { margin-left:2em; white-space:nowrap; break-inside:auto; }
.TOC1table tr { vertical-align:top; text-align:left; break-inside:avoid; break-after:auto; }
.TOC1table td+td { padding:0 0 0 0.5em; }
.TOC1table .numb { width:3em; max-width:3em; }
.TOC1table .sepr { width:5em; max-width:6em; overflow:hidden; }
.TOC1table .majr { font-weight:bold; }
.TOC1table .text { white-space:normal; }

/* These are due to Firefox (at least <= 76) recalcitrant multi-column handling.
   Web search "Split table into css columns, issue in Firefox" (stackoverflow).
   "Good grief, Charlie Brown!" */
 
.TOC1cols2 table,
.TOC1cols2 tbody,
.TOC1cols2 tr,
.TOC1cols3 table,
.TOC1cols3 tbody,
.TOC1cols3 tr,
.TOC1cols4 table,
.TOC1cols4 tbody,
.TOC1cols4 tr { display:block; padding:0; }

.TOC2cols1 { width:60%; max-width:60%; }
.TOC2cols2 { column-count:2; width:70%; max-width:70%; }
.TOC2cols3 { column-count:3; width:80%; max-width:80%; }
.TOC2cols4 { column-count:4; width:90%; max-width:90%; }
.TOC2table { margin-left:2em; white-space:nowrap; break-inside:auto; }
.TOC2table tr { vertical-align:top; text-align:left; break-inside:avoid; break-after:auto; }
.TOC2table .numb { font-weight:bold; padding-right:0.5em; }
.TOC2table .text { width:100%; white-space:normal; }

/* see "recalcitrant" above */
.TOC2cols2 table,
.TOC2cols2 tbody,
.TOC2cols2 tr,
.TOC2cols3 table,
.TOC2cols3 tbody,
.TOC2cols3 tr,
.TOC2cols4 table,
.TOC2cols4 tbody,
.TOC2cols4 tr { display:block; padding:0; }

.NAVtable { margin:0.1em 0 0 2em; }
.NAVtable td { font-size:110%; font-weight:bold; padding:0; margin:0; }
.NAVtable a { padding:0 0.5em 0 0.5em; text-decoration:none; }

.IDXcols1 { width:80%; max-width:80%; }
.IDXcols2 { column-count:2; width:90%; max-width:90%; }
.IDXcols3 { column-count:3; width:95%; max-width:95%;  }
.IDXcols4 { column-count:4; width:100%; max-width:100%;  }
.IDXtable { margin:1em 0 1em 2em; white-space:nowrap; break-inside:auto; }
.IDXtable tr { vertical-align:top; text-align:left; break-inside:avoid; break-after:auto; }
.IDXtable .alpha { font-weight:bold; min-width:2em; }
.IDXtable .text  { width:100%; white-space:normal; }
.IDXtable .para:before { content:'\00b6\00a0'; }

/* see "recalcitrant" above */
.IDXcols2 table,
.IDXcols2 tbody,
.IDXcols2 tr,
.IDXcols3 table,
.IDXcols3 tbody,
.IDXcols3 tr,
.IDXcols4 table,
.IDXcols4 tbody,
.IDXcols4 tr { display:block; padding:0; }

.insight { background-color:cyan; font-family:monospace;
           padding:0 0.2em 0 0.2em; margin:0 0.2em 0 0.2em;
           font-size:100%; font-style:normal; font-weight:normal;
           text-decoration:none; }

.wasdoc { font-family: "Lucida Console", Monaco, monospace; 
          letter-spacing:-0.07em; }

@media screen { .blank::after { content:"\2924"; } 
                .print { display:none; }
}

@media print {
   table { page-break-inside:avoid; }
   .noprint { display:none; }
   .page { border:none; page-break-after: always; }
   .epage { display:none; }
   .ppage { page-break-after:always; }
   .NAVtable { display:none; }
   .NAVprint { display:block!important; }
}

@page { margin:2cm 1cm 2cm 1cm;  }
</style>
<!-- source:0000_config.wasdoc -->

<style type="text/css">._smiley::after { font-size:150%; vertical-align:middle; content:'\263a' }</style>
<style type="text/css">._frowny::after { font-size:150%; vertical-align:middle; content:'\2639' }</style>

<a id="0." href="#"></a>
<title>WASD Configuration &ndash; Message Configuration</title>
<a id="8." href="#"></a>
<a id="8.messageconfiguration" href="#"></a>
<a id="messageconfiguration" href="#"></a>
<h1 class="head chunk">WASD Configuration</h1>
<h1 class="head"><span class="numb">8.</span><span class="text">Message Configuration</span></h1>

<table class="TOC2table">
<tr><td><a href="config008.html#8.1.behaviour"><span class="numb">8.1</span><span class="text">Behaviour</span></a>
<tr><td><a href="config008.html#8.2.messagefileformat"><span class="numb">8.2</span><span class="text">Message File Format</span></a>
<tr><td><a href="config008.html#8.3.multiplelanguagespecifications"><span class="numb">8.3</span><span class="text">Multiple Language Specifications</span></a>
<tr><td><a href="config008.html#8.4.suppliedmessagefiles"><span class="numb">8.4</span><span class="text">Supplied Message Files</span></a>
</table>
</div>

<table class="NAVtable NAVprint"><tr>
<td><a href="javascript:window.history.back();">&#8617;&#xFE0E;</a>
<td><a href="config007.html#7.">&#8598;&#xFE0E;</a>
<td><a href="config000.html#0.">&#8593;&#xFE0E;</a>
<td><a href="config009.html#9.">&#8600;&#xFE0E;</a>
<td><a href="javascript:window.history.forward();">&#8618;&#xFE0E;</a>
</table>

<p> By default, the logical name <span class="high bold">WASD_CONFIG_MSG</span> locates the global message
configuration file.  A text editor may be used to modify this configuration
file.  Changes require a server restart to put them into effect. 

<p> Message configuration is provided for two purposes.

<ol class="list">

<li class="item"> Some sites would prefer to customize or extend the basic information
provided to clients when an error or other event occurs.

<li class="item"> Sites that do not use English as a first language may wish to provide
some or all of the defined messages using a prefered language.

</ol>

<p> Not all messages provided by the WASD server are customizable, only those
generated for non-administrative content. As the WASD server can also report
using information derived from the standard VMS message service (via
<span class="high italic">sys&dollar;getmsg()</span>) it is assumed a language-local implementation of this is in
use as well. Unfortunately for the non-first-language-English Web and system
administrators, the menus and messages used for administration purposes, etc.,
are still only in English. The intent of this facility is to provide
non-administration clients only with a more familiar language environment.

<p> Also note that the message database only applies to messages generated by
the server, not to any generated by scripts, etc.

<p> Changes to the message configuration file can be validated at the
command-line before restart.  This detects and reports any syntactical and 
fatal configuration errors but of course cannot check the <span class="high italic">intent</span> of the
rules.

<div class="blockof code">&dollar; HTTPD /DO=MSG=CHECK
</div>

<a id="8.1" href="#"></a>
<a id="8.1.behaviour" href="#"></a>
<a id="behaviour" href="#"></a>
<h2 class="head"><span class="numb">8.1</span><span class="text">Behaviour</span></h2>

<p> When an error, or other message or string, needs to be provided for the
client the message database is accesssed using the following algorithm.

<ol class="list">

<li class="item"> If the client request has specified a list of prefered languages using
the &quot;Accept-Language:&quot; HTTP header field the message database is checked for
support of that/those languages. If one is found then that language is used to
access the message.

<li class="item"> If none is found, or the client has not specified a prefered language,
the client host address is checked against any list of hosts/domains provided
against the language (see below). If a match occurs the specified language is
used.

<li class="item"> If neither of the above results in a message language the base language
is used (the highest numbered language). This <span class="high bold">must</span> have a complete set of
messages or the server will not start!

</ol>

<a id="8.2" href="#"></a>
<a id="8.2.messagefileformat" href="#"></a>
<a id="messagefileformat" href="#"></a>
<h2 class="head"><span class="numb">8.2</span><span class="text">Message File Format</span></h2>

<p> By default, the system-table logical name WASD_CONFIG_MSG locates a common
message file, unless an individual message file is specified using a job-table
logical name. Simple editing of the message file changes the messages (after a
server restart, of course). Comment lines may be included by prefixing them
with the hash character (&quot;#&quot;), and lines continued by ensuring the last
character is a backslash (&quot;&#94;&quot;). The server will concurrently support an
additional 3 languages to the base English (although this can be increased by
recompilation <span class="high _smiley">

<div class="note center"><a id="8.2.0.0.0.1" href="#"></a>
<a id="8.2.note" href="#"></a>
<a id="note" href="#"></a>
<h5 class="head center"><span class="text">Note</span></h5>
<hr class="note_hr">

<span class="high bold">Care must be taken with the message file or the server may refuse to start!</span>
<br>Worst-case; the WASD_CONFIG_MSG.CONF message file may be copied from
[EXAMPLE].
<hr class="note_hr">
</div>

<p> As illustrated below the message file comprises a series of sections.
Directives enclosed by square-brackets provide information to the message
loader.

<div class="blockof code"># this is a comment

[version]   9.0
[language]  1  en

[general]

en 01 Sanity check failure.
en 02 String overflow.
en 03 Heap allocation failed.
en 04 calloc() failed
en 05 Request calloc() failed.
en 06 Server too busy.
en 07 Server access denied.
en 08 Facility is disabled.
en 09 Wildcard not permitted.
en 10 Directory layout problem.

[next-section, etc.]
</div>

<p> The square-bracketed section headings have the following functions.

<ul class="list">

<li class="item"> <span class="high bold">[version] &ndash; </span> Ensures the correct database version is available for
the server version attempting to use it. The message file always needs checking
for this version number being changed at server updates, although the version
may remain fixed at a previous server version number if there have been no
changes to the message database during subsequent server versions. This must be
the first directive in the file.

<li class="item"> <span class="high bold">[language] &ndash; </span> Creates space for assigning the new language's
messages. The number specifies an order within the languages, each must be
different, but only the lowest and highest (prefered and base respectively)
have operational significance. The highest number should always be English to
provide a fall-back message. A short string provides an identifier for the
language. This identifier should be the same as the identifying string in the
browser request &quot;Accept-Language:&quot; header field (e.g. &quot;en&quot;, &quot;se&quot;, &quot;de&quot;, &quot;fr&quot;,
etc.)  Multiple, comma-separated languages may be specified.  The first is the
primary language of that list and messages must be specified using that.  The
subsequent languages are equivalents that might be specified by the client.  A
wildcard may be used to match all possibilities (e.g. &quot;de,de-*&quot;, &quot;es,es-*&quot;). 
Following the language identifier  is an optional host/domain list. Multiple
hosts/domains may be specified by separating each with a comma. The
specifications may contain wildcards.  All the [language] directives should be
grouped at the start of the file immediately following the [version] directive.
A character set may be associated with a particular language by specifying a
<span class="high italic">charset=</span> following the language string (e.g. &quot;ru charset=koi8-r&quot;).  Setting
the language's ordering number to zero disables the language completely.  All
messages associated with it will then be ignored.

<li class="item"> <span class="high bold">[group-name] &ndash; </span> The messages are divided into groupings to make
them easier to manage.  Each group begins with the group name directive.

<li class="item"> <span class="high bold">en 01 message &ndash; </span> Each message in a group is assigned using using
this format.  The string identifying the language, then the message number (the
leading zero just improves the format, strictly it is not required), then the
actual message itself.  The message can be of arbitrary length.  Long messages
may be continued on following lines using the &quot;&#94;&quot; continuation character.

</ul>

<p> The base language (the highest numbered, which should always be English)
must have precisely the right number of messages required by the server, too
few or too many and the server will not start! <span class="high bold">Additional languages do not
have to reassign every message!</span> The base language will supply any not
assigned. A message number of zero is disabled and completely ignored.

<p> If messages contain HTML tags that markup must not interfere with the
general HTML page it is used within.

<p> Some messages are a composite of multiple strings each of which is used on a
different part of the one page (e.g. for the [upd] edit-page).  Each of the
strings is delimited by the vertical bar &quot;&verbar;&quot;.  Care must be taken when
customizing these strings that the overall number stays the same and that the
length of each does not become excessive.  Although it will not disrupt the
server it may significantly disrupt the page layout.

<p> All message numbers must be included.  To provide an empty string for any
one message (not recommended) provide the line with nothing following the
message number.

<a id="8.3" href="#"></a>
<a id="8.3.multiplelanguagespecifications" href="#"></a>
<a id="multiplelanguagespecifications" href="#"></a>
<h2 class="head"><span class="numb">8.3</span><span class="text">Multiple Language Specifications</span></h2>

<p> Multiple language messages can be specified in two ways:

<ul class="list">
<li class="item"> within the one file
<li class="item"> in multiple files specified by a multivalued logical name
</ul>

<a id="8.3.0.0.1" href="#"></a>
<a id="8.3.withintheonefile" href="#"></a>
<a id="withintheonefile" href="#"></a>
<h5 class="head"><span class="text">Within The One File</span></h5>

<p> Language availability is specified through the use of [Language] directives. 
These must be numbered from 1 to the count of those supplied.  The highest
numbered language must have the complete set of messages for this is the
fallback when obtaining any message (this would normally be &quot;en&quot;).  The
[Language] may be specified as a comma-separated list of equivalent or similar
specifications, which during request processing will be matched against a
client specified list of accepted-languages one at a time in specified order. 
A wildcard may be specified which matches all fitting the template.  In this
manner a single language can be used also to match minor variants or language
specification synonyms.

<div class="blockof code">[Version]  9.0
[Language]  1  es,es-ES
[Language]  2  de,de-*
[Language]  3  en

[auth]
es 01  Habla Espanol
de 01  Sprechen Sie Deutsches
en 01  Do you speak English
.
.
.(full set of messages)
</div>
In the above (rather contrived) example a client request with
<div class="blockof code">Accept-Language: es-ES,de;q=0.6,en;q=0.3
</div>
would have language 1 selected, a client with
<div class="blockof code">Accept-Language: de-ch,es;q=0.6,en;q=0.3
</div>
language 2 selected, with
<div class="blockof code">Accept-Language: pt-br,de;q=0.6,en;q=0.3
</div>
also language 2 selected, with
<div class="blockof code">Accept-Language: pt
</div>
language 3 (the default) selected, etc.

<p> Note that the messages for each language must use the *first* language
specification provided in the [Language] list.  In the example above all
messages for language 1 would be introduced using 'es', for language 2 with
'de' and for language 3 with 'en'.

<a id="8.3.0.0.2" href="#"></a>
<a id="8.3.multiplefilesmultivaluedlogicalname" href="#"></a>
<a id="multiplefilesmultivaluedlogicalname" href="#"></a>
<h5 class="head"><span class="text">Multiple Files - Multivalued Logical Name</span></h5>

<p> With this approach a logical name containing multiple file names is defined
(more commonly described as a logical search list).  The final file specified
must contain the full message set.  Files specified prior to this, can contain
as many or as few of the full set as is desired.  A [Language] number does not
need to be specified as they are processed in the order the logical name
specifies them in.  Other language file directives are required.

<p> The following is an example of a logical name providing the same three
languages in the examples above.

<div class="blockof code">&dollar; DEFINE /SYSTEM WASD_CONFIG_MSG WASD_ROOT:[LOCAL]WASD_CONFIG_MSG_ES.CONF, -
                           WASD_ROOT:[LOCAL]WASD_CONFIG_MSG_DE.CONF, -
                           WASD_ROOT:[LOCAL]WASD_CONFIG_MSG.CONF
</div>

<p> The file contents would be as follows (very contrived examples :-)

<div class="blockof code"># WASD_CONFIG_MSG_ES.CONF
[Version]  9.0
[Language]  0  es,es-ES
[auth]
es 01  Habla Espanol
es 02  Habla Inglesi
[dir]
es 03  Habla Espanol
es 04  Habla Inglesi

# WASD_CONFIG_MSG_DE.CONF
[Version]  9.0
[Language]  0  de,de-*
[auth]
de 01  Sprechen Sie Deutsches
de 02  Sprechen Sie Englisch
[dir]
de 03  Sprechen Sie Deutsches
de 04  Sprechen Sie Englisch

# WASD_CONFIG_MSG.CONF
[Version]  9.0
[Language]  0  en
[auth]
.
.
.(full set of messages)
</div>

<p> The <span class="high bold">major advantage</span> of maintaining multiple files in this way is there
is <span class="high bold">no need to merge files</span> when a new revision is required.  Just update the
version number and add any new required messages to the existing secondary
file.

<a id="8.4" href="#"></a>
<a id="8.4.suppliedmessagefiles" href="#"></a>
<a id="suppliedmessagefiles" href="#"></a>
<h2 class="head"><span class="numb">8.4</span><span class="text">Supplied Message Files</span></h2>

<p> Any non-English message files that are provided to the author will be
included for general use (please take the time to support this endeavour) in
the <a class="link blank" target="_blank" href="/wasd_root/example/WASD_CONFIG_msg*.conf">WASD_ROOT:[EXAMPLE]</a>
directory.

<p> Note that message files can become out-of-date as server versions change,
requiring modifications to the message database.  Check the version information
and/or comments at the top of candidate message files, however even slightly
dated files may serve as a good starting point for a locale-specific message
base.

</span>
<!-- source:1100_CACHE.WASDOC -->

<table class="NAVtable NAVprint"><tr>
<td><a href="javascript:window.history.back();">&#8617;&#xFE0E;</a>
<td><a href="config007.html#7.">&#8598;&#xFE0E;</a>
<td><a href="config000.html#0.">&#8593;&#xFE0E;</a>
<td><a href="config009.html#9.">&#8600;&#xFE0E;</a>
<td><a href="javascript:window.history.forward();">&#8618;&#xFE0E;</a>
</table>