Guidelines for coding translatable exception message text lines

If you want to generate skeletons for message translations for your check exception WTO messages, it will impact the way you code the message text for your messages in the message table. For example, if you want to generate NLS skeletons for your messages, you must break up message text in the message table into lines of 71 characters or less. The line length is calculated based on the total length of the message text, and the maximum length that each insert is defined. When you use HZSMSGEN, you can specify NLSCHECK(Y) to specify that the system enforce the NLS length guideline. HZSMSGEN enforces these restrictions when messages are created.

To make sure that you can generate your exception messages successfully, and that messages will translate successfully at runtime, use the following guidelines to help you calculate the length of each message line to make sure that each line is 71 characters or less:
  • On the first line of the message text, remember that the message identifier, or number, can require up to 11 characters.
  • You must use <lines></lines> to define a new line before you reach the WTO limit of 71 characters.
  • Specify <mv class="variable_class" xreftext="maxlen(nnn)>" for all the variables in your exception messages to define the maximum length possible for each variable. This will make it much easier for you to calculate where you need to insert a <lines></lines> tag to break up a message text to avoid exceeding the 71 character limit. If you do not specify maxlen, you must allow for the maximum space allowed for the type of variable when calculating where you want to break your line with <lines></lines>. See Table 1 for specifics on variable lengths.
  • For a predefined system symbol, which is resolved at check run time, you must allow for the maximum space allowed for the element when calculating the number of characters it will take up. See Table 1.
  • Both system symbols and variables can be longer than 71 characters themselves. This is OK, as long as the lengthy item is followed by a new line indicator (<lines></lines> tags together) or is the very last thing in the message text.
When you specify NLSCHECK(Y) and run the HZSMSGEN exec with he HZSNPSKE and HZSNLSKE DD statements uncommented, your message skeletons are generated in the output data set specified on the HZSNLSKE DD statement.
  • Set variable HZSNPSKE to the name of a sequential data set or a member of a PDS that contains the NLS prologue. The product version record is required by MMS and must be included in NLS prologue to produce a compilable NLS skeleton.
  • Set variable HZSNLSKE to the name of a sequential data set or a member of a PDS to be used as output. It will contain the NLS message skeleton when NLSCHECK(Y) is specified and message generation completes with a return code of 0. This data set must have a variable record length of 259.
//HZSMSGEN JOB                                                    
//*                                                               
//        SET  SYSPROC=SYS1.SBLSCLI0(HZSMSGEN)                    
//        SET  HZSMDSN=SYS1.SAMPLIB(HZSSMSGT)                     
//        SET  HZSADSN=&SYSUID..TEMP.ASM;                          
//        SET  HZSSDSN=SYS1.SAMPLIB(HZSSSYMD)                     
//        SET  HZSNPSKE=&SYSUID..DUMMY.NLS.PROLOGUE;               
//        SET  HZSNLSKE=&SYSUID..TEMP.SKEL;                       
//*                                                              
//HZSMSG  EXEC PGM=IKJEFT01,REGION=32M,                          
//        PARM='%HZSMSGEN NLSCHECK(N) SOURCE(ERROR)'             
//SYSTSPRT DD  SYSOUT=*,DCB=(LRECL=132,BLKSIZE=132,RECFM=FB)     
//SYSPROC  DD  DISP=SHR,DSN=&SYSPROC;                                 
//SYSTSIN  DD  DUMMY                                                 
//HZSMDSN  DD  DISP=SHR,DSN=&HZSMDSN;                                 
//HZSSDSN  DD  DISP=SHR,DSN=&HZSSDSN;                                 
//HZSADSN  DD  DSN=&HZSADSN;,DISP=(NEW,KEEP),                         
//  SPACE=(TRK,(10,10)),UNIT=SYSDA,DCB=(LRECL=80,BLKSIZE=0,RECFM=FB) 
//HZSNPSKE DD  DSN=&HZSNPSKE;,DISP=SHR         
//HZSNLSKE DD  DSN=&HZSNLSKE;,DISP=(NEW,KEEP), 
//* SPACE=(TRK,(10,10)),UNIT=SYSDA,DCB=(LRECL=259,BLKSIZE=0,RECFM=VB)
/*                                                                   
When you use the HZSMSGEN exec to generate skeletons for the following messages:
CSVH0970E New extents were detected in LNKLST set(s). 
CSVH0980E Some LNKLST sets include data set(s) allocated
 with secondary space defined.
You will get the following skeletons generated:
CSVH0970E          New extents were detected in LNKLST set(s).         
CSVH0980E 01001    Some LNKLST sets include data set(s) allocated with 
CSVH0980E 01002    secondary space defined.                            

You can customize the timestamp, date, or day generated by timestamp symbols or variables in your messages, by customizing the format for the symbols in the system configuration SYS1.PARMLIB CNL members. See CNLcccxx (Time and date format for translated messages) in z/OS MVS Initialization and Tuning Reference for additional information.

For predefined system symbols &hzsgmttime; and &hzslocaltime; the format used in the skeletons is as follows:
 &DATE;=DATEMDY4. &TIME;=TIMEHMSCD6
Parmlib members CNLENU00 and CNLJPN00 now include symbol TIMEHMSCD6.
Because the length of class=gmltime and localtime variables might vary (for example, if you specify field size, <mv class="gmltime" xreftext=" fieldsize(11)"), the format used in the skeletons will also vary by length as follows. Note that using other lengths than those shown produces results that will not match a date/time NLS skeleton.
Fieldsize  Formatted date/time          NLS skeleton
26         mm/dd/yyyy.hh.mm.ss.tttttt   &DATE=DATEMDY4. &TIME=TIMEHMSCD6.
25         mm/dd/yyyy.hh.mm.ss.ttttt    &DATE=DATEMDY4. &TIME=TIMEHMSCD5.
24         mm/dd/yyyy.hh.mm.ss.tttt     &DATE=DATEMDY4. &TIME=TIMEHMSCD4.
23         mm/dd/yyyy.hh mm.ss.ttt      &DATE=DATEMDY4. &TIME=TIMEHMSCD3.
22         mm/dd/yyyy.hh.mm.ss.tt       &DATE=DATEMDY4. &TIME=TIMEHMSCD2.
21         mm/dd/yyyy.hh.mm.ss.t        &DATE=DATEMDY4. &TIME=TIMEHMSCD1.
19         mm/dd/yyyy.hh.mm.ss          &DATE=DATEMDY4. &TIME=TIMEHMSC.  
16         mm/dd/yyyy.hh.mm             &DATE=DATEMDY4. &TIME=TIMEHMC.   
13         mm/dd/yyyy.hh                &DATE=DATEMDY4. &hh.             
10         mm/dd/yyyy                   &DATE=DATEMDY4.