Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

450 lines
51 KiB

{\rtf1\ansi \deff0\deflang1024{\fonttbl{\f0\froman Times New Roman;}{\f1\froman Symbol;}{\f2\fswiss Arial;}{\f3\froman Courier PS;}{\f4\fswiss Chicago;}{\f5\froman New York;}{\f6\fswiss Geneva;}{\f7\fmodern Monaco;}
{\f8\fscript Venice;}{\f9\fnil Cairo;}{\f10\fnil Zapf Dingbats;}{\f11\fnil N Helvetica Narrow;}{\f12\froman Palatino;}{\f13\fdecor zapf chancery;}{\f14\froman Times;}{\f15\fswiss Helvetica;}{\f16\fmodern Courier;}{\f17\fnil Avant Garde;}
{\f18\fdecor MSDingbats;}{\f19\fnil BI Letter Gothic BoldSlanted;}{\f20\fnil I Letter Gothic Slanted;}{\f21\fnil CLB Helvetica Condensed Black;}{\f22\fnil CL Helvetica Condensed Light;}{\f23\fnil SpecialA;}{\f24\fnil Bullets;}{\f25\fnil Letter Gothic;}
{\f26\fnil B Letter Gothic Bold;}{\f27\fnil C Helvetica Condensed;}{\f28\fswiss Helvetica-Narrow;}{\f29\fnil cour;}{\f30\fmodern Courier New;}{\f31\fmodern Courier Bold;}{\f32\fmodern Courier 10cpi;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;
\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue127;\red0\green127\blue127;\red0\green127\blue0;\red127\green0\blue127;\red127\green0\blue0;
\red127\green127\blue0;\red127\green127\blue127;\red192\green192\blue192;}{\stylesheet{\s223\li100 \f2\fs16\lang1033 \sbasedon0\snext0 annotation reference;}{\s224\li100 \f2\fs20\lang1033 \sbasedon0\snext224 annotation text;}{
\s225\li5040\ri720\tldot\tx8280\tqr\tx8640 \f2\fs20\lang1033 \sbasedon0\snext0 toc 8;}{\s226\li4320\ri720\tldot\tx8280\tqr\tx8640 \f2\fs20\lang1033 \sbasedon0\snext0 toc 7;}{\s227\li3600\ri720\tldot\tx8280\tqr\tx8640 \f2\fs20\lang1033
\sbasedon0\snext0 toc 6;}{\s228\li2880\ri720\tldot\tx8280\tqr\tx8640 \f2\fs20\lang1033 \sbasedon0\snext0 toc 5;}{\s229\li2160\ri720\sa120\tldot\tx8280\tqr\tx8640 \f3\fs20\lang1033 \sbasedon0\snext0 toc 4;}{\s230\li1440\ri720\tldot\tx8280\tqr\tx8640
\i\f27\fs16\lang1033 \snext232 toc 3;}{\s231\li720\ri720\tldot\tx8280\tqr\tx8640 \i\f27\fs16\lang1033 \snext230 toc 2;}{\s232\ri720\tldot\tx8280\tqr\tx8640 \i\f27\fs16\lang1033 \snext231 toc 1;}{\s233\li2160 \f2\fs20\lang1033 \sbasedon0\snext0 index 7;}{
\s234\li1800 \f2\fs20\lang1033 \sbasedon0\snext0 index 6;}{\s235\li1440 \f2\fs20\lang1033 \sbasedon0\snext0 index 5;}{\s236\li1080 \f2\fs20\lang1033 \sbasedon0\snext0 index 4;}{\s237\li720 \i\f27\fs16\lang1033 \snext239 index 3;}{\s238\li360
\i\f27\fs16\lang1033 \snext237 index 2;}{\s239 \i\f27\fs16\lang1033 \snext238 index 1;}{\s240\li100 \f2\fs20\lang1033 \sbasedon0\snext0 line number;}{\s241\li100 \f2\fs20\lang1033 \sbasedon0\snext239 index heading;}{\s242\li100\tqc\tx4320\tqr\tx8640
\f2\fs20\lang1033 \sbasedon0\snext242 footer;}{\s243\li100\tqc\tx4320\tqr\tx8640 \f2\fs20\lang1033 \sbasedon0\snext243 header;}{\s244\li100 \f2\fs18\up6\lang1033 \sbasedon0\snext0 footnote reference;}{\s245\li100 \f2\fs20\lang1033
\sbasedon0\snext245 footnote text;}{\s246\li720 \i\f2\fs20\lang1033 \sbasedon0\snext255 heading 9;}{\s247\li720 \i\f2\fs20\lang1033 \sbasedon0\snext255 heading 8;}{\s248\li720 \i\f2\fs20\lang1033 \sbasedon0\snext255 heading 7;}{\s249 \b\f2\fs20\lang1033
\snext222 heading 6;}{\s250\li240\sb120\sa40 \b\i\f2\fs20\lang1033 \snext222 heading 5;}{\s251\sb160\sa40 \b\i\f2\fs20\lang1033 \snext222 heading 4;}{\s252\sb200\sa80 \b\f2\fs20\lang1033 \snext222 heading 3;}{\s253\sa160\sl-280 \b\f2\lang1033
\snext222 heading 2;}{\s254\sa160\sl-280\dxfrtext187\dfrmtxtx187\dfrmtxty187 \b\f2\lang1033 \snext222 heading 1;}{\s255\li720 \f2\fs20\lang1033 \sbasedon0\snext255 Normal Indent;}{\li100 \f2\fs20\lang1033 \sbasedon8\snext0 Normal;}{\s2\li360
\f2\fs20\lang1033 \snext2 *LeftIndent;}{\s3\fi-260\li360\sa40\tx360 \f2\fs20\lang1033 \snext3 *Procedure;}{\s4\li100\sb80\sa40 \b\f2\fs20\lang1033 \snext4 *SubHead2;}{\s5\fi-240\li600\sa43\tx600 \f2\fs20\lang1033 \snext5 *JumpList;}{\s6\li100\sa86\keepn
\b\f2\lang1033 \snext11 *Heading;}{\s7\fi-1400\li1500\sb40\sa40\brdrb\brdrs\brdrw15\brsp20 \brdrbtw\brdrs\brdrw15\brsp20 \tx1500 \b\f2\fs16\lang1033 \snext7 *TableHead;}{\s8\li100 \f2\fs20\lang1033 \snext8 *Standard;}{\s9\fi-300\li400\sa40\tx400
\f2\fs20\lang1033 \snext9 *Ten+Procedure;}{\s10\li300\sb43\sa43 \f2\fs20\lang1033 \snext3 *UserInput;}{\s11\li100\sa86 \f2\fs20\lang1033 \snext11 *Intro;}{\s12\li100\sb86\sa86 \f2\fs20\lang1033 \snext12 *Note/Or;}{\s13\li100\sa43 \b\f2\fs20\lang1033
\snext3 *SubHead1;}{\s14\fi-260\li360\sa43\tx360 \f2\fs20\lang1033 \snext14 *FlushJumpList;}{\s15\fi-1400\li1500\sa40\tx1500 \f2\fs20\lang1033 \snext15 *Table;}{\s16\li86 \b\i\f2\fs16\lang1033 \snext6 *OrienterHeading;}{\s17\li100\sa86\keepn
\b\f2\fs20\lang1033 \snext17 *SmallHeading;}{\s18\li1584\sa240 \f30\fs20\lang1033 \sbasedon0\snext18 Code;}{\s19\sa240 \i\f3\fs20\lang1033 \sbasedon0\snext19 unimplemented;}{\s20\sa240 \b\f3\fs20\lang1033 \sbasedon0\snext20 figure heading;}{\s21\sa240
\f16\fs20\lang1033 \sbasedon0\snext21 Source Code;}{\s22\li360\sb120\sa60 \f2\fs20\lang1033 \sbasedon0\snext255 Normal Usage;}{\s23\li187 \f2\fs20\lang1033 \sbasedon57\snext23 bullet single-sp;}{\s24\li187\sb240 \f2\fs20\lang1033
\sbasedon0\snext254 abstract;}{\s25\li187\sb240 \f2\fs20\lang1033 \sbasedon0\snext25 bridge;}{\s26\li187\sb240 \f2\fs20\lang1033 \sbasedon0\snext46 byline;}{\s27\li187\sb240 \b\f2\fs20\lang1033 \sbasedon0\snext27 syntax;}{\s28\li187\sb240
\f2\fs20\lang1033 \sbasedon0\snext28 note;}{\s29\li187\sb240 \i\f2\fs20\lang1033 \sbasedon0\snext29 biography;}{\s30\li360\sb240 \f2\fs20\lang1033 \sbasedon0\snext30 indent;}{\s31\li187\brdrb\brdrdb\brdrw15\brsp20 \brdrbtw\brdrdb\brdrw15\brsp20
\b\f2\fs30\lang1033 \sbasedon0\snext26 title;}{\s32\li187\sb480\brdrb\brdrs\brdrw15\brsp20 \brdrbtw\brdrs\brdrw15\brsp20 \b\f2\fs30\lang1033 \sbasedon0\snext24 abstract title;}{\s33\fi-360\li540\sb144\tx540\tx900 \f2\fs20\lang1033
\sbasedon39\snext33 abstract bullet;}{\s34\li187\sb240 \f2\fs18\lang1033 \sbasedon53\snext34 disclaimer;}{\s35\li187\sb240 \f2\fs20\lang1033 \sbasedon57\snext35 number;}{\s36\li274\ri-1296\tx630\tx990\tx1350\tx1710 \f30\fs20
\sbasedon18\snext36 figure in abstract;}{\s37\li187\sb240 \v\f2\fs20\lang1033 \sbasedon0\snext37 comment;}{\s38\fi-360\li540\sb144\tx540\tx900 \f2\fs20\lang1033 \sbasedon39\snext38 numbered list 1;}{\s39\fi-360\li540\sb144\tx540\tx900 \f2\fs20\lang1033
\sbasedon0\snext39 bulleted list 1;}{\s40\fi-360\li900\sb144\tx900\tx1260 \f2\fs20\lang1033 \sbasedon39\snext40 bulleted list 2;}{\s41\fi-360\li900\sb144\tx900\tx1260 \f2\fs20\lang1033 \sbasedon40\snext41 numbered list 2;}{\s42\li547\sb240
\b\f2\fs20\lang1033 \sbasedon0\snext42 figure in list;}{\s43\li187\sb240\sa72 \b\f2\fs20\lang1033 \sbasedon0\snext44 table title;}{\s44\li187\sb320 \b\f2\fs18\lang1033 \sbasedon0\snext0 table head;}{\s45\li187\sb480 \b\f2\fs22\lang1033
\sbasedon0\snext0 no-head;}{\s46\li187\sb240 \f2\fs20\lang1033 \sbasedon0\snext51 history;}{\s47\li547\sb240 \f2\fs20\lang1033 \sbasedon0\snext47 list add'l para;}{\s48\li187\sb240 \f2\fs20\lang1033 \sbasedon0\snext48 example;}{
\s49\li547\ri-1584\tx630\tx990\tx1350\tx1710 \f30\fs20 \sbasedon18\snext49 code list;}{\s50\fi-360\li1267\sb144\tx900\tx1260 \f2\fs20\lang1033 \sbasedon40\snext50 bulleted list 3;}{\s51\li187\sb240 \v\f2\fs20 \sbasedon0\snext70 bin;}{
\s52\li187\sb240\sa240 \f2\fs20\lang1033 \sbasedon0\snext18 normal precode;}{\s53\li187\sb240 \f2\fs20\lang1033 \sbasedon0\snext53 description;}{\s54\li187\sb1 \f2\fs20\lang1033 \sbasedon52\snext49 precode list;}{\s55\li187\sb240 \f2\fs20\lang1033
\sbasedon0\snext55 keywords;}{\s56\li187\sb240 \f2\fs20\lang1033 \sbasedon0\snext56 tags;}{\s57\li187\sb240 \f2\fs20\lang1033 \sbasedon0\snext57 bullet;}{\s58\fi-860\li860\sa40\tx600\tx860 \f2\fs20\lang1033 \snext58 *Key/Mouse;}{
\s59\fi-360\li900\sb144\tx900\tx1260 \f2\fs20\lang1033 \sbasedon40\snext59 alpha list 2;}{\s60\li187\sb240 \v\f2\fs20 \sbasedon0\snext73 revision history;}{\s61\li187\sb240 \i\f2\fs20\lang1033 \sbasedon0\snext62 quote;}{\s62\qr\li187\sb240
\i\f2\fs20\lang1033 \sbasedon0\snext62 quoted person;}{\s63\fi-360\li540\sb144\sl240\tx540\tx900 \f2\fs20\lang1033 \sbasedon39\snext63 note bulleted list;}{\s64\li187\sb240\sl240 \f2\fs20\lang1033 \sbasedon28\snext64 note add'l para;}{\s65\li187\sb240
\b\f2\fs20\lang1033 \sbasedon0\snext65 figure caption;}{\s66\li187\sb1 \f2\fs20\lang1033 \sbasedon54\snext66 table in list;}{\s67\li547\ri-1584\tx630\tx990\tx1350\tx1710 \f30\fs20 \sbasedon49\snext67 example in list;}{\s68\li187\sb240\box
\brdrs\brdrw15\brsp20 \b\f2\fs20\lang1033 \sbasedon0\snext69 boxed heading;}{\s69\li187\sb240\box\brdrs\brdrw15\brsp20 \f2\fs20\lang1033 \sbasedon0\snext69 boxed text;}{\s70\li187\sb240 \v\f2\fs20 \sbasedon0\snext60 art status;}{\s71\li187\sb240 \f2\fs20
\sbasedon0\snext71 button-open;}{\s72\li187\sb240 \f2\fs20 \sbasedon0\snext72 button-run;}{\s73\li187\sb240 \f2\fs20 \sbasedon0\snext32 button-dir;}{\s74\li907\ri-1872\tx630\tx990\tx1350\tx1710 \f30\fs20 \sbasedon49\snext74 code list 2;}{\s75\li187\sb240
\b\f2\fs20\lang1033 \sbasedon0\snext76 term1;}{\s76\li907 \f2\fs20\lang1033 \sbasedon0\snext76 def1;}{\s77\li907\sb240 \f2\fs20\lang1033 \sbasedon76\snext77 def1 addl para;}{\s78\li907\sb240 \b\f2\fs20\lang1033 \sbasedon0\snext79 term2;}{\s79\li1627
\f2\fs20\lang1033 \sbasedon0\snext79 def2;}{\s80\li2347 \f2\fs20\lang1033 \sbasedon0\snext80 def3;}{\s81\li1627\sb240 \b\f2\fs20\lang1033 \sbasedon0\snext80 term3;}{\s82\li187\sb240\brdrt\brdrs\brdrw15 \f2\fs20\lang1033 \sbasedon0\snext0 table rule;}{
\s83\li907\sb240 \f2\fs20\lang1033 \sbasedon0\snext83 list para 2;}{\s84\li1267\sb240 \f2\fs20\lang1033 \sbasedon0\snext84 list para 3;}}{\info{\title Resource Localization Manager}{\author David H. Wilcox}{\operator David H. Wilcox}
{\creatim\yr1993\mo9\dy28\hr13\min25}{\revtim\yr1993\mo9\dy28\hr13\min25}{\version2}{\edmins10}{\nofpages1}{\nofwords65536}{\nofchars65536}{\vern16433}}\paperw12240\paperh15840\margl1800\margr1800\margt1440\margb1440\gutter0
\deftab360\widowctrl\ftnbj\ftnrestart {\*\template C:\\WINWORD\\HELPMAC.DOT}\sectd \pgnrestart\linex0\endnhere\titlepg {\header \pard\plain \s243\li100\brdrb\brdrs\brdrw15\brsp20 \tqc\tx4320\tqr\tx8640 \f2\fs20\lang1033 {\b\fs18
The Resource Localization Manager}{\fs18 \tab \tab Page }{\field{\*\fldinst {\fs18 PAGE}}{\fldrslt {\fs18 11}}}
\par }{\footer \pard\plain \s242\qc\li100\brdrt\brdrs\brdrw15\brsp20 \tqc\tx4320\tqr\tx8640 \f2\fs20\lang1033 \tab
\par }{\footerf \pard\plain \s242\li100\brdrt\brdrs\brdrw15\brsp20 \tqc\tx4320\tqr\tx8640 \f2\fs20\lang1033 \tab \tab
\par }\pard\plain \s6\li101\sa86\keepn \b\f2\lang1033 {\plain \f2\fs18\up6\lang1033 #{\footnote \pard\plain \s245\li100 \f2\fs20\lang1033 {\fs18\up6 #} Contents}}{\plain \f2\fs18\up6\lang1033 ${\footnote \pard\plain \s245\li100 \f2\fs20\lang1033 {\fs18\up6 $}
Contents}}{\plain \f2\fs18\up6\lang1033 }Contents
\par \pard\plain \s11\li101\sb240\sa240 \f2\fs20\lang1033 {\field\flddirty{\*\fldinst {\b\fs28 title }}{\fldrslt {\b\fs28 Resource Localization Manager}}}{\b\fs28
\par }\pard\plain \li100 \f2\fs20\lang1033 {{\pict\wmetafile8\picw847\pich847\picwgoal480\pichgoal480 \picscalex234\picscaley150
010009000003660100000000420100000000050000000b0200000000050000000c022000200005000000090200000000050000000102ffffff00040000000701030042010000430f2000cc00000020002000000000002000200000000000280000002000000020000000010004000000000000020000000000000000000000
000000000000000000000000008000008000000080800080000000800080008080000080808000c0c0c0000000ff0000ff000000ffff00ff000000ff00ff00ffff0000ffffff00606666fffffff666666666666666666660666fffffffff66666666666666666660666ffff0ffff6666666666666666666066666ff0ff6666
66666666666666666066666660666666666666666666666660666666606666666666666666666666606666666066666fffff66666666666660666666606666fff0fff666666666666066666660666666f0f6666666666666606666696066666660666fff6666666660666669606666666066ff0ff666666660666699606666
6660666f0f66666666606669f960666c666066660666666666606669996066cc666066660666fff666606669f96066cc666066660666f0f66660669999606ccf6660666606666066666069f9f9606cff66606666066660666660699f9960ccff666066660666606666609ff9f960cff9666066f6066660666660f99f9960cf
f966606ff60666606666609fc9f960ff99666069f60666606f9660f9cf9960ff996660f99606aa60cf96609cc99660f996666099f60abb60cf9660cccf966099966660f9f60bba60cf9660ccc9666099666660ff660aa660c66660ccc9666099666660f6660a6660c66660ccc9666096666660f666066663666660ccc66660
9666666b6666366666666660cc66666bb66666666666666666666660cc66666666666666666666666666666bb666666666666666666666666666666bb66666666666666666666666666666030000000000}}
\par
\par \pard \li101\sa60 {\uldb Introduction}{\v\fs18\cf6 Introduction}{\uldb
\par }{\uldb Usage}{\v\fs18\cf6 Usage}
\par {\uldb Localization Process}{\v\fs18\cf6 Localizatio}{\v\fs18\cf6 nProcess}
\par \pard \li101 {\uldb Data Files and Formats}{\v\fs18\cf6 DataFilesAndFormats}
\par \pard\plain \s6\li101\sa86\keepn \b\f2\lang1033 \page {\plain \f2\fs18\up6\lang1033 #{\footnote \pard\plain \s245\li100 \f2\fs20\lang1033 {\fs18\up6 #} Introduction}}{\plain \f2\fs18\up6\lang1033 ${\footnote \pard\plain \s245\li100 \f2\fs20\lang1033 {
\fs18\up6 $} Introduction}}{\plain \f2\fs18\up6\lang1033 }Introduction
\par \pard\plain \li100 \f2\fs20\lang1033 In the past, {\ul localization}{\v\fs18\cf6 localization}{\fs16\up6 }of a software product required the {\ul localizer}{\v\fs18\cf6 localization}
to edit strings and controls embedded in source code and then rebuild the product in order to test the localized version. Such a process requires at least a rudimentary knowledge of computer programming and is often prone to human error. The Resource Loc
alization Manager (hereafter referred to as RLMan) was designed to automate localization of
products that make use of the Windows resource model by allowing the localizer to extract localizable resources directly from the applications that use them, modify the resources, and use the modified resources to create localized versions of the origina
l applications. All this can be achieved without rebuilding the product and with minimal knowledge of computer operations.
\par
\par RLMan was designed with several goals in mind. Some of these goals were:
\par \pard \fi-259\li360\tx360 1.\tab Allow the product to be localized without access to source code and without re-compilation.
\par 2.\tab Allow localization to proceed concurrent with development (provide update capability).
\par 3.\tab Allow localizers to share glossaries of common terms among applications.
\par \pard \fi-360\li720
\par \pard \li100 The localization model followed by the RLMan is very simple. Localizable resources are extracted from a source resource file{\fs16\up6 \chftn {\footnote \pard\plain \s245\li100 \f2\fs20\lang1033 {\fs16\up6 \chftn }
This document refers to a resource file as being any file that contains Windows resources. This can be a .EXE file (or a .DLL, a .CPL, etc.), as well as a .RES file. RLMan can use any of these files as resource files.}}
and put into special text file called a token file. Each localizable resource may generate one or more tokens. Each token is contained on a single line of text and consists of a
unique identifier followed by the localizable data associated with that particular resource. These tokens can then be localized by using a standard text editor.
\par
\par The localized tokens are then used in conjunction with the source resource file to generate a new localized resource file. The term "resource file" in this document means "any Windows executable format file (.EXE, .DLL, .CPL, etc.) or .RES file". The targ
et resource file will contain exactly the same resources as the source resource file, the only difference is that the data will be localized.
\par
\par This model has been expanded a little to allow for update tracking. When localization is done in conjunction with development a target resource file may change after the localizer has tokenized the file and begun translation. Update tracking allows the lo
calizer to update the localized token file without losing any work that might have been done. Any resources that may have changed since the most recent update are marked "dirty" and the change is tracked
in the token file so the localizer may see exactly what changed and exactly how it changed.
\par
\par To allow for update tracking, the source resource file is used to generate a "master token file" which tracks changes. The master token file is then used to update any number of "language token files" (one for each target language). These language token f
iles are then localized and used to generate the target resource files.
\par \pard\plain \s6\li101\sa86\keepn \b\f2\lang1033 \page {\plain \f2\fs18\up6\lang1033 #{\footnote \pard\plain \s245\li100 \f2\fs20\lang1033 {\fs18\up6 #} Usage}}{\plain \f2\fs18\up6\lang1033 ${\footnote \pard\plain \s245\li100 \f2\fs20\lang1033 {\fs18\up6
$} Usage}}{\plain \f2\fs18\up6\lang1033 }Usage
\par \pard\plain \li100 \f2\fs20\lang1033 Any file name can include a UNC (Unified Naming Convention) or a drive letter, and a directory path.
\par
\par \pard \li100\sa120 The syntax of the 'RLMan' command is as follows:
\par \pard \li360\sa120 {\b rlman} [{\b -c} {\i RDFile}] [ {\b -p} {\i CodePage} ] [ {\b -f} {\i ResType} ] [-\{{\b n}|{\b o}\} PriLang SubLang] [{\b -w}] {\b -}\{{\b e}|{\b t}|{\b m}|{\b l}|{\b r|a}\} {\i files
\par }Note: The {\b -e}, {\b -t}, {\b -m}, {\b -l}, {\b -r} and {\b -a} options (together with their {\i files} file names) are mutually exclusive and must be last on the command line.
\par \pard\plain \s22\li360\sb120\sa60 \f2\fs20\lang1033 {\b -e} {\i InputExeFile} {\i OutputResFile}
\par \pard\plain \s255\li720 \f2\fs20\lang1033 Extract localizable resources from the resource file (.exe, .dll, .cpl, .etc.) {\i InputExeFile} and create a Win32 resource file {\i OutputResFile}. This output fi
le can then be used, for example, by the dialog box editor or the bit map editors that come with the SDK.
\par \pard\plain \s22\li360\sb120\sa60 \f2\fs20\lang1033 {\b -t} {\i InputResOrExeFile} {\i OuputTokenFile}
\par \pard\plain \s255\li720 \f2\fs20\lang1033 This option will extract the localizable resources from the executable or resource format file {\i InputResOrExeFile} and create a project token file {\i\uldb OuputTokenFile}{\i\v\fs18\cf6 LanguageTokenFiles_TOK_}
. Using this option will circumvent the history-keeping mechanism of RLMan. It is made available for those times when the user wants to simply see what localizable resources are in the input file or when the history mechanism is not needed. Using the {\b
-o} option and the {\b -p} option with the {\b -t}
option will allow one to extract and tokenize resources of a specific language. The resulting token file will contain only those resources that have the specified locale and the text will be in the given code page.
\par \pard\plain \s22\li360\sb120\sa60 \f2\fs20\lang1033 {\b -m} {\i MasterProjectFile} [ {\i InputResOrExeFile} {\i MasterTokenFile} ]
\par \pard\plain \s255\li720 \f2\fs20\lang1033 When the history mechanism is wanted, the first step when creating a new master project or updating an existing master project is to use this option. If the {\i\uldb MasterProjectFile}{\i\v\fs18\cf6
MasterProjectFiles_MPJ_} does not exist, the optional {\i InputResOrExeFile} and {\i\uldb MasterTokenFile}{\i\v\fs18\cf6 MasterTokenFiles_MTK_} arguments must be provided. These last two arguments will be ignored if the {\i MasterProjectFile} exists.
\par \pard\plain \s22\li360\sb120\sa60 \f2\fs20\lang1033 {\b -l} {\i LanguageProjectFile} [ {\i MasterProjectFile} {\i LanguageTokenFile} ]
\par \pard\plain \s255\li720 \f2\fs20\lang1033 This option is used, when the history mechanism is wanted, to create a new localization project or to update an existing project. If the {\i\uldb LanguageProjectFile}{\i\v\fs18\cf6 ProjectFiles_PRJ_} does not
exist, the optional {\i\uldb MasterProjectFile}{\i\v\fs18\cf6 MasterProjectFiles_MPJ_} (the one created via the {\b -m} option) and {\i\uldb LanguageTokenFile}{\i\v\fs18\cf6 LanguageTokenFiles_TOK_}
arguments must be provided. These last two arguments will be ignored if the {\i LanguageProjectFile} exists.
\par \pard\plain \s22\li360\sb120\sa60 \f2\fs20\lang1033 {\b -r} {\i InputResOrExeFile} {\i LanguageTokenFile} {\i OutputResOrExeFile}\tab
\par \pard\plain \s255\li720 \f2\fs20\lang1033 This option is used to create a localized version of the {\i InputResOrExeFile}. The resources in that {\i InputResOrExeFile} will be replaced with the localized resources in {\i\uldb LanguageTokenFile}{
\i\v\fs18\cf6 LanguageTokenFiles_}{\i\v\fs18\cf6 TOK_}. {\i OutputResOrExeFile} is the localized version.
\par \pard\plain \s22\li360\sb120\sa60 \f2\fs20\lang1033 {\b -a} {\i InputResOrExeFile} {\i LanguageTokenFile} {\i OutputResOrExeFile}\tab
\par \pard\plain \s255\li720 \f2\fs20\lang1033 This option is used to create a localized version of the {\i InputResOrExeFile}. The resources in the resulting {\i OutputResOrExeFile} will include the original resources from {\i InputResOrExeFile}
plus the localized resources in {\i\uldb LanguageTokenFile}{\i\v\fs18\cf6 LanguageTokenFiles_TOK_}. Use the {\b -n} option to specifiy what the new language is.
\par \pard\plain \s22\li360\sb120\sa60 \f2\fs20\lang1033 {\b -n} {\i PriLang SubLang}
\par \pard\plain \s255\li720 \f2\fs20\lang1033 Specifies what the language the tokens in the token file are in and consequently what language the new resources are in. Used when setting up a new Language Project ({\b -l}) and with the {\b -r} and {\b -a}
options. Can also be used with the {\b -m} option when the resources in the original resource file are not in U.S. English. {\i PriLang SubLang} are decimal values from the list of allowed values in the SDK.
\par \pard\plain \s22\li360\sb120\sa60 \f2\fs20\lang1033 {\b -o} {\i PriLangID SubID}
\par \pard\plain \s255\li720 \f2\fs20\lang1033 Specifies what the language the resources being replaced in, or extracted from, the source resource file are in.
\par
\par Used with the {\b -r} and {\b -a} options when the resources being replaced, or added to, in the original resource file are not in U.S. English. {\i PriLang SubLang}
are decimal values from the list of allowed values in the SDK. For example, if the U.S. English resources had been replaced with German resources and now you wanted to add French resources to that German file, use the {\b -o} option (with arguments {\b
7 1}) to indicate that the original resources are in German not U.S English together with the {\b -a} option. Or, if you had created a file with U.S. English plus
German resources in it, and now you wanted to replace the German resources with French (thus making a U.S English plus French file), you would use the {\b -r} option with the {\b -o} option (with arguments {\b 7 1}) and the {\b -n}
option ( with arguments {\b 12 1}) to indicate that the old German resources are to be replaced with the new ones in the given French token file.
\par
\par Used with the {\b -t} option, this identifies the language of the resources that are to be tokenized. You should also use the {\b -p} option to specifiy the code page the text in the token file is to be written in.
\par \pard\plain \s22\li360\sb120\sa60 \f2\fs20\lang1033 {\b -c} {\i RDFile}
\par \pard\plain \s255\li720 \f2\fs20\lang1033 Use custom resources defined in the resource description file {\i\uldb RDFile}{\i\v\fs18\cf6 ResourceDescriptionFiles_RDF_}.
\par \pard\plain \s22\li360\sb120\sa60 \f2\fs20\lang1033 {\b -p} {\i CodePage}
\par \pard\plain \s255\li720 \f2\fs20\lang1033
The default code page used in converting between the Unicode resources and the text in the token files is the Windows ANSI code page. To change the code page, use this option and use the IBM code page number as the {\i CodePage}
argument. For example; -p 932.
\par \pard\plain \s22\li360\sb120\sa60 \f2\fs20\lang1033 {\b -f} {\i ResourceType}
\par \pard\plain \s255\li720 \f2\fs20\lang1033 By default, all localizable resources are extracted. To extract a single resource type, use this option with {\i ResourceType} set to the resource type's numeric value (1-16 for Windows resources).
\par \pard\plain \s22\li360\sb120\sa60 \f2\fs20\lang1033 {\b -w}
\par \pard\plain \s255\li720 \f2\fs20\lang1033 Print warnings about unknown custom resource types ({\b -c} option not given or resource type is not in the {\i RDFFile}
), and about resources that are not tokenized because their language is not the language requested ({\b -o} option, or US English by default). It will also warn of any zero-length resources found.
\par \pard\plain \s6\li101\sa86\keepn \b\f2\lang1033 \page {\plain \f2\fs18\up6\lang1033 #{\footnote \pard\plain \s245\li100 \f2\fs20\lang1033 {\fs18\up6 #} LocalizationProcess}}{\plain \f2\fs18\up6\lang1033 ${\footnote \pard\plain \s245\li100
\f2\fs20\lang1033 {\fs18\up6 $} Localization Process}}{\plain \f2\fs18\up6\lang1033 }Localization Process
\par \pard\plain \li100 \f2\fs20\lang1033 There are two basic types of localization. Th
e first is when a product is correctly enabled for localization ("globalized"), the product development is finished, and all that is needed is to modify the localizable resources. We'll call this the "{\uldb One-Shot Process}{\v\fs18\cf6 One_ShotProcess}
". The second is when a product is being localized in parallel with the development process and the localization work is to be preserved across new builds of the original (typically English) file. We'll call this the "{\uldb Parallel Process}{\v\fs18\cf6
ParallelProcess}". It is done in parallel with product development so the localized versions are ready as soon as possible after the domestic version is.
\par \pard\plain \s6\li101\sa86\keepn \b\f2\lang1033 {\plain \f2\fs18\up6\lang1033 \page #{\footnote \pard\plain \s245\li100 \f2\fs20\lang1033 {\fs18\up6 #} One_ShotProcess}}{\plain \f2\fs18\up6\lang1033 ${\footnote \pard\plain \s245\li100 \f2\fs20\lang1033 {
\fs18\up6 $} One-Shot Process}}{\plain \f2\fs18\up6\lang1033 }One-Shot Process
\par \pard\plain \li100 \f2\fs20\lang1033 To simplify the file names on the command line, change directories to the place where the localized files are to be kept. Leave the source executable (typically the English version) in some other directory
{\field\flddirty{\*\fldinst SYMBOL 45 \\f "Symbol"}{\fldrslt }} anywhere on the network or on the local machine.
\par
\par \pard \fi-259\li360\tx360 1.\tab Create the project token file "prog.tok".\line {\fs8 \line }{\b\f30 rlman -t prog.exe prog.tok}
\par
\par 2.\tab Translate the text in the "prog.tok" file with your favorite text editor. Assume German in this example.
\par
\par 3.\tab If dialog boxes are to be resized:
\par
\par \pard \li720\tx360 Create the file "tmpprog.exe" which will contain the translated text.\line {\fs8 \line }{\b\f30 rlman -n 7 1 -r prog.exe prog.tok tmpprog.exe}
\par \pard\plain \s255\li720 \f2\fs20\lang1033
\par Create the .RES file, in German, needed by the dialog editor in the SDK.\line {\fs8 \line }{\b\f30 rlman -e tmpprog.exe prog.res}
\par
\par Resize the dialog boxes as appropriate to account for the different lengths of the translated text.\line {\fs8 \line }{\b\f30 dlgedit prog.res}
\par
\par Update the project token file with the revised dialog box coordinates and sizes.\line {\fs8 \line }{\b\f30 rlman -t prog.res prog.tok}
\par \pard\plain \fi-360\li360 \f2\fs20\lang1033
\par \pard \fi-259\li360\tx360 4.\tab Create the final, localized, executable.\line {\fs8 \line }{\b\f30 rlman -n 7 1 -r prog.exe prog.tok newprog.exe}{\b
\par }\pard \li100
\par This completes the process. The German file "newprog.exe" is now ready to be tested.
\par
\par \pard \li101\sa60\tx1080 See also\tab {\uldb Parallel Process}{\v\fs18\cf6 ParallelProcess}
\par \tab {\uldb Languages SupportedBy Windows NT}{\v\fs18\cf6 LanguagesSupportedByWindowsNT}
\par \pard\plain \s6\li101\sa86\keepn \b\f2\lang1033 \page {\plain \f2\fs18\up6\lang1033 #{\footnote \pard\plain \s245\li100 \f2\fs20\lang1033 {\fs18\up6 #} ParallelProcess}}{\plain \f2\fs18\up6\lang1033 ${\footnote \pard\plain \s245\li100 \f2\fs20\lang1033 {
\fs18\up6 $} Parallel Process}}{\plain \f2\fs18\up6\lang1033 }Parallel Process
\par \pard\plain \li100 \f2\fs20\lang1033 This process maintains the localization work from one build of the source executable (typically the English version) to the next. With this version of RLMan there is one caveat {\field\flddirty{\*\fldinst SYMBOL 45 \\
f "Symbol"}{\fldrslt }}
if the developers change the ID number of a localizable item, the previous translation will be lost. This is being addressed and a solution will be available in a future release of RLMan. New items can be added or old ones deleted but an item with a chan
ged ID will show up as a new item.
\par
\par \pard \li101\sa60\tx1080 See also\tab {\uldb Project Creation}{\v\fs18\cf6 ProjectCreation}
\par \tab {\uldb Maintaining the Master Project}{\v\fs18\cf6 MaintainingTheMasterProject}
\par \pard \li100\tx1080 \tab {\uldb Maintaining Each Locale Project}{\v\fs18\cf6 Ma}{\v\fs18\cf6 intainingEachLocaleProject}
\par
\par and\tab {\uldb One-Shot Prosess}{\v\fs18\cf6 One_ShotProcess}
\par \pard\plain \s6\li101\sa86\keepn \b\f2\lang1033 \page {\plain \f2\fs18\up6\lang1033 #{\footnote \pard\plain \s245\li100 \f2\fs20\lang1033 {\fs18\up6 #} ProjectCreation}}{\plain \f2\fs18\up6\lang1033 ${\footnote \pard\plain \s245\li100 \f2\fs20\lang1033 {
\fs18\up6 $} Project Creation}}{\plain \f2\fs18\up6\lang1033 }Project Creation
\par \pard\plain \fi-259\li360\tx360 \f2\fs20\lang1033 1.\tab
Create a directory for the master files and a separate directory for the project files. These directories may be anywhere on the net. The master project directory may contain any number of master projects, one need not create a new directory for each p
roject as long as the base name for each master project in unique. There should be a separate directory for each localized version of the executable file. Typically this means one directory for each language.
\par
\par 2.\tab Move to the master directory.
\par
\par 3.\tab Copy the source executable to the master directory.
\par
\par 4.\tab Create the master project file and the master token file.\line {\fs8 \line }{\b\f30 rlman -m prog.mpj prog.exe prog.mtk}
\par
\par 5.\tab Move to the project directory (for German in this example).
\par
\par 6.\tab Create the project file and the project token file.\line {\fs8 \line }{\b\f30 rlman -n 7 1 -l prog.prj prog.mpj prog.tok}
\par
\par 7.\tab Steps 5 and 6 need to be repeated for each project directory (language). The resulting {\b prog.tok} files can then be translated to the appropriate language.
\par
\par \pard \li101\sa60\tx1080 See also\tab {\uldb Maintaining the Master Project}{\v\fs18\cf6 MaintainingTheMasterProject}
\par \tab {\uldb Languages Supported By Windows NT}{\v\fs18\cf6 LanguagesSupportedByWindowsNT}
\par \pard\plain \s6\li101\sa86\keepn \b\f2\lang1033 \page {\plain \f2\fs18\up6\lang1033 #{\footnote \pard\plain \s245\li100 \f2\fs20\lang1033 {\fs18\up6 #} MaintainingTheMasterProject}}{\plain \f2\fs18\up6\lang1033 ${\footnote \pard\plain \s245\li100
\f2\fs20\lang1033 {\fs18\up6 $} Maintaining the Master Project}}{\plain \f2\fs18\up6\lang1033 }Maintaining the Master Project
\par \pard\plain \fi-259\li360\tx360 \f2\fs20\lang1033 1.\tab Copy the newly built source executable to the master directory.
\par
\par \pard\plain \s255\fi-259\li360\tx360 \f2\fs20\lang1033 2.\tab Move to the master directory, then update the master project file and the master token file.\line {\fs8 \line }{\b\f30 rlman -m prog.mpj
\par }{\f30
\par }\pard\plain \li100\tx1080 \f2\fs20\lang1033 See also\tab {\uldb Project Creation}{\v\fs18\cf6 ProjectCreation}
\par \pard\plain \s6\li101\sa86\keepn \b\f2\lang1033 \page {\plain \f2\fs18\up6\lang1033 #{\footnote \pard\plain \s245\li100 \f2\fs20\lang1033 {\fs18\up6 #} MaintainingEachLocaleProject}}{\plain \f2\fs18\up6\lang1033 ${\footnote \pard\plain \s245\li100
\f2\fs20\lang1033 {\fs18\up6 $} Maintaining Each Locale Project}}{\plain \f2\fs18\up6\lang1033 }Maintaining Each Locale Project
\par \pard\plain \fi-259\li360\tx360 \f2\fs20\lang1033 1.\tab Follow steps 2 and 3 of the "one-shot process" (previous page) as often as desired until the resources are localized satisfactorily.
\par
\par 2.\tab Every time the master project is been updated (step 2 in the "Maintaining the Master Project" section), update the project file and project token file.\line {\fs8 \line }{\b\f30 rlman -l prog.prj}
\par \pard \li100
\par Repeat step 1 as needed to catch new or changed resource items.
\par
\par \pard \li101\sa60\tx1080 See also\tab {\uldb Maintaining the Master Project}{\v\fs18\cf6 MaintainingTheMasterProject}
\par \tab {\uldb Project Creation}{\v\fs18\cf6 ProjectCreation}
\par \pard\plain \s6\li101\sa86\keepn \b\f2\lang1033 \page {\plain \f2\fs18\up6\lang1033 #{\footnote \pard\plain \s245\li100 \f2\fs20\lang1033 {\fs18\up6 #} DataFilesAndFormats}}{\plain \f2\fs18\up6\lang1033 ${\footnote \pard\plain \s245\li100
\f2\fs20\lang1033 {\fs18\up6 $} Data Files and Formats}}{\plain \f2\fs18\up6\lang1033 }Data Files and Formats
\par \pard\plain \li100 \f2\fs20\lang1033 RLMan uses a variety of special file types. All of the file formats described below are a special form of text file. Each file is human-readable and can be edited with any standard text file editor (such as Notepad).
\par
\par As a general rule, all text in these files follows the C escape convention when dealing with non-displayable characters. This convention uses escape characters to represent non-displayable characters. For example, \\n is newline and \\t is tab.
\par
\par \pard \li101\sa60 {\uldb Master Project Files (MPJ)}{\v\fs18\cf6 MasterProjectFiles_MPJ_}
\par {\uldb Project}{\uldb Files (PRJ)}{\v\fs18\cf6 ProjectFiles_PRJ_}
\par {\uldb Master Token Files (MTK)}{\v\fs18\cf6 MasterTokenFiles_MTK_}
\par {\uldb Language Token Files (TOK)}{\v\fs18\cf6 LanguageTokenFiles_TOK_}
\par \pard \li100 {\uldb Resource Description Files (RDF)}{\v\fs18\cf6 ResourceDescriptionFiles_RDF_}
\par \pard\plain \s6\li101\sa86\keepn \b\f2\lang1033 \page {\plain \f2\fs18\up6\lang1033 #{\footnote \pard\plain \s245\li100 \f2\fs20\lang1033 {\fs18\up6 #} MasterProjectFiles_MPJ_}}{\plain \f2\fs18\up6\lang1033 ${\footnote \pard\plain \s245\li100
\f2\fs20\lang1033 {\fs18\up6 $} Master Project Files (MPJ)}}{\plain \f2\fs18\up6\lang1033 }Master Project Files (MPJ)
\par \pard\plain \li100 \f2\fs20\lang1033 Master project files consist of seven lines of text:
\par \pard \fi-360\li360
\par \pard \fi-259\li360\tx360 1.\tab The first line contains the path to the source resource file. This may be either a .RES file, or an .EXE format file.
\par
\par 2.\tab The second line contains the path to the master token file (MTK).
\par
\par 3.\tab The third line contains zero, one or more paths to resource description files (RDFs) separated by spaces.
\par
\par 4.\tab The fourth line contains a date stamp indicating the date of the source resource file as of the last update.
\par
\par 5.\tab The fifth line contains a date stamp indicating the date of the master token file as of the last update of the master project.
\par
\par 6.\tab The sixth line contains the primary- and sub-{\uldb language components}{\v\fs18\cf6 LanguagesSupportedByWindowsNT} of the Language ID of the resources in the {\uldb master token file}{\v\fs18\cf6 MasterTokenFiles_MTK_} (.MTK).
\par
\par 7.\tab The seventh line contains the code page used when reading/writing the master token file. A zero (0) means the system's Windows ANSI code page. A one (1) means the syetem's default OEM code page. Other values are actual code page numbers.
\par
\par \pard \li101\sa60\tx1080 See also\tab {\uldb Project Files (PRJ)}{\v\fs18\cf6 ProjectFiles_PRJ_}
\par \pard\plain \s6\li101\sa86\keepn \b\f2\lang1033 {\plain \f2\fs18\up6\lang1033 \page #{\footnote \pard\plain \s245\li100 \f2\fs20\lang1033 {\fs18\up6 #} ProjectFiles_PRJ_}}{\plain \f2\fs18\up6\lang1033 ${\footnote \pard\plain \s245\li100
\f2\fs20\lang1033 {\fs18\up6 $} Project Files (PRJ)}}{\plain \f2\fs18\up6\lang1033 }Project Files (PRJ)
\par \pard\plain \li100 \f2\fs20\lang1033 Project files consist of seven lines of text:
\par \pard \fi-360\li360
\par \pard \fi-259\li360\tx360 1.\tab The first line contains the path to the master project file (MPJ).
\par
\par 2.\tab The second line contains the path to the language token file (TOK).
\par
\par 3.\tab The third line contains the path to the target resource file. This may be either a .RES file or (if the source resource in the MTK is an .EXE file) an .EXE format file.
\par
\par 4.\tab The fourth line contains a date stamp indicating the date of the master token file (MTK) as of the last update of the project.
\par
\par 5.\tab The fifth line may be left blank or it may contain the path to a glossary file. ({\ul Not used in this release.})
\par
\par 6.\tab The sixth line contains the code page used when reading/writing the project token file. A zero (0) means the system's Windows ANSI code page. A one (1) means the syetem's default OEM code page. Other values are actual code page numbers.
\par
\par 7.\tab The seventh line contains the primary- and sub-{\uldb language components}{\v\fs18\cf6 LanguagesSupportedByWindowsNT} of the Language ID of the resources in the {\uldb language token file}{\v\fs18\cf6 LanguageTokenFiles_TOK_} (.TOK).
\par
\par \pard \li101\sa60\tx1080 See also\tab {\uldb Master Project Files (MPJ)}{\v\fs18\cf6 MasterProjectFiles_MPJ_}
\par \pard\plain \s6\li101\sa86\keepn \b\f2\lang1033 \page {\plain \f2\fs18\up6\lang1033 #{\footnote \pard\plain \s245\li100 \f2\fs20\lang1033 {\fs18\up6 #} MasterTokenFiles_MTK_}}{\plain \f2\fs18\up6\lang1033 ${\footnote \pard\plain \s245\li100
\f2\fs20\lang1033 {\fs18\up6 $} Master Token Files (MTK)}}{\plain \f2\fs18\up6\lang1033 }Master Token Files (MTK)
\par \pard\plain \li100 \f2\fs20\lang1033 Master token files are text files which contain tokenized resources
taken from some source resource file. Each token consists of a unique identifier followed by the text form of the resource data. Tokens are delimited by end-of-line characters.
\par
\par Master token files are used for update tracking. They contain no localized resource data and should not be changed except by RLMan.
\par
\par \pard \li100\keep An example of what one token might look like is shown below:
\par \pard \li100 \tab [[5|255|1|32|5|"FOO"]]=Localizable string containing text in C format.
\par The token ID is surrounded by double square brackets and divided into 6 fields delimited by the vertical pipe '|' symbol:
\par \pard \fi-360\li360
\par \pard \fi-259\li360\tx360 1.\tab The first field indicates the type of the resource
\par
\par 2.\tab The second field is the resource name in the case of an enumerated resource, or it is 65535 if the name is a label (string) in which case the label itself is stored in the sixth field.
\par
\par 3.\tab The third field is the internal resource id number taken from the resource header.
\par
\par 4.\tab The fourth field is made up of a combination of data taken from the resource header and generated by the tools. This value is used in conjunction with the other values in the token ID to uniquely identify the resource.
\par
\par 5.\tab The fifth field is a status field used by the update tools to determine the status of the current token.
\par
\par 6.\tab The sixth field contains the name of the resource if the resource is identified by a label. Otherwise it contains a null string.
\par \pard \fi-360\li360
\par \pard \li100 A token ID is followed by an equal sign which is in turn followed by the resource data. The data extends from after the equal sign to the end of the line
(exclusive). Non printing characters (such as new-line and control characters) are represented using C escape sequences. Two of the most common are {\b \\n} for new-line and {\b \\t} for tab. Some characters are shown in the form '\\
nnn' where nnn is the decimal value of that character.
\par
\par A token's status field is made up of combinations (bitwise OR'ing) of three basic flags:
\par
\par \pard \fi-2160\li2160\tx360\tx1440 {\b CHANGED}\tab {\b 4}\tab Indicates that the token has changed since the last update
\par {\b READONLY}\tab {\b 2}\tab Indicates that the token should not be localized.
\par \pard \fi-2160\li2160\tx360\tx1440\tx2160 {\b NEW}\tab {\b 1}\tab Used in conjunction with the {\b CHANGED} flag to indicate that this is the new version of the token.
\par \pard \li100\tx360\tx2160
\par For example, if a token has changed during an update, the current text would be stored in a token with a status of {\b CHANGED}+{\b NEW}
(4 + 1) = 5. The previous text is also stored in the token file using the same token ID but the status field would contain a 4 ({\b CHANGED}). This way both the current and the previous text are retained.
\par \pard \li100
\par See also\tab {\uldb Language Token Files (TOK)}{\v\fs18\cf6 LanguageTokenFiles_TOK_}
\par \pard\plain \s6\li101\sa86\keepn \b\f2\lang1033 \page {\plain \f2\fs18\up6\lang1033 #{\footnote \pard\plain \s245\li100 \f2\fs20\lang1033 {\fs18\up6 #} LanguageTokenFiles_TOK_}}{\plain \f2\fs18\up6\lang1033 ${\footnote \pard\plain \s245\li100
\f2\fs20\lang1033 {\fs18\up6 $} Language Token Files (TOK)}}{\plain \f2\fs18\up6\lang1033 }Language Token Files (TOK)
\par \pard\plain \li100 \f2\fs20\lang1033 Language token files are similar to master token files; the only difference being the meaning of the status fields found in the token identifiers.
\par
\par Language token files are used during localization. They contain localized resource data.
\par
\par A token's status field is made up by combinations of four flags:
\par
\par \pard \fi-2160\li2160\tx360\tx1440\tx2160 {\b TRANSLATED}\tab {\b 4}\tab Indicates that the token contains text that should be put in the target resource. If a token is not marked as {\b TRANSLATED}
then it contains unlocalized text from the master token file which is maintained for update tracking purposes.
\par {\b READONLY}\tab {\b 2}\tab Indicates that the token should not be localized.
\par {\b NEW}\tab {\b 1}\tab Used only for tokens that are not marked with the {\b TRANSLATED} flag to indicate that this is the new version of the unlocalized token.
\par {\b DIRTY}\tab {\b 1}\tab Used only for tokens that are marked with the {\b TRANSLATED} flag to indicate that the token is in need of attention (either the original translation has changed or the token has never been localized).
\par \pard \li100
\par For example, a clean, localized token is marked only with the {\b TRANSLATED} flag and therefore has a status value of 4.
\par
\par As in the Master token files, non printing characters (such as new-line and control characters) are represented (and entered by the localizer) using C escape sequences. Two of the most common are {\b \\n} for new-line and {\b \\t}
for tab. Some characters are shown or entered in the form '\\nnn' where nnn is the decimal value of that character. The localizer may enter any character it's '\\nnn' form.
\par
\par \pard \li100\tx1080 See also\tab {\uldb Master Token Files (MTK)}{\v\fs18\cf6 MasterTokenFile}{\v\fs18\cf6 s_MTK_}
\par \pard\plain \s6\li101\sa86\keepn \b\f2\lang1033 \page {\plain \f2\fs18\up6\lang1033 #{\footnote \pard\plain \s245\li100 \f2\fs20\lang1033 {\fs18\up6 #} ResourceDescriptionFiles_RDF_}}{\plain \f2\fs18\up6\lang1033 ${\footnote \pard\plain \s245\li100
\f2\fs20\lang1033 {\fs18\up6 $} Resource Description Files (RDF)}}{\plain \f2\fs18\up6\lang1033 }Resource Description Files (RDF)
\par \pard\plain \li100 \f2\fs20\lang1033
Custom resources are described in resource description files (RDFs) using c-like structure definitions. Each definition is identified with a specific resource type and the definition is applied to every resource of that given type.
\par
\par An identifier is declared by the following syntax:
\par
\par {\b <}{\i type}{\b >}
\par
\par Types are numbers or quoted names {\ul unless} they are normal windows types in which case the standard Windows type name may be used in place of a number or name. (CURSOR
, BITMAP, ICON, MENU, DIALOG, STRING, FONTDIR, FONT, ACCELERATORS, RCDATA, ERRTABLE, GROUP_CURSOR, GROUP_ICON, NAMETABLE, and VERSION).
\par
\par A structure definition follows normal 'C' syntax with the following limitations and differences:
\par
\par \pard \fi-259\li360\tx360 1.\tab Each definition must be fully enclosed in braces {\b \{} {\b \}}.
\par
\par 2.\tab The standard 'C' types: {\f31 char} (single-byte OEM characters), {\f31 int}, {\f31 float}, {\f31 long}, {\f31 short}, {\f31 unsigned}, and {\f31 near} and {\f31 far} pointers are accepted. Additionaly, the types {\f31 wchar}
(Unicode character) and {\f31 tchar} (Unicode in the NT version, OEM otherwise) are accepted. (Labels and macros are not legal.)
\par
\par 3.\tab Nested structures, arrays and arrays of structures are legal. All arrays must have a fixed count except for strings which are described below. int[10] is legal int[] is not.
\par
\par 4.\tab Null terminated strings (sz's) are the only variable length structures allowed. They are represented as an array of characters with no length: char[]
\par
\par 5.\tab Fixed length strings are represented as arrays of characters with a fixed length: char[10]
\par
\par 6.\tab Comments may be included in the file using standard c comment delimiters (/* */ and //) or by placing them after the pound symbol #.
\par
\par 7.\tab Localizable types (types that need to be placed in token files) are indicated by all caps. Hence INT would generate a token while int would not.
\par
\par \pard \fi-259\li360\tx1080 See also\tab {\uldb Sample RDF File}{\v\fs18\cf6 SampleRDFFile}
\par \pard\plain \s6\li101\sa86\keepn \b\f2\lang1033 \page {\plain \f2\fs18\up6\lang1033 #{\footnote \pard\plain \s245\li100 \f2\fs20\lang1033 {\fs18\up6 #} SampleRDFFile}}{\plain \f2\fs18\up6\lang1033 ${\footnote \pard\plain \s245\li100 \f2\fs20\lang1033 {
\fs18\up6 $} Sample RDF File}}{\plain \f2\fs18\up6\lang1033 }Sample RDF File
\par \pard\plain \s21\sa120 \f16\fs20\lang1033 # This is a sample Resource Description File
\par \pard \s21 <"type">
\par \pard \s21\fi-1800\li1800\tx360\tx720\tx1080\tx1440\tx1800 \{
\par \tab int,\tab \tab \tab // {\f2 no token will be generated for this integer}
\par \tab CHAR\tab \tab \tab // {\f2 this single-byte character will be}{\f2 placed in a token}
\par \}
\par <RCDATA>
\par \{
\par \tab WCHAR[]\tab \tab // {\f2 a null terminated Unicode string that requires a token}
\par \tab wchar[]\tab \tab // {\f2 no token will be generated for this Unicode string}
\par \}
\par <1000>
\par \{
\par \tab TCHAR[],\tab \tab // {\f2 a null terminated Unicode or OEM string that requires}
\par \tab \tab \tab \tab \tab // {\f2 a token (Unicode if running NT version, else OEM).}
\par \tab \{
\par \tab \tab int,
\par \tab \tab FLOAT,\tab \tab // {\f2 localizable floating point value}
\par \tab \tab far *,
\par \tab \tab CHAR[20]\tab // {\f2 localizable 20 character single-byte string}
\par \tab \}[3],\tab \tab \tab // {\f2 an array of three structures (NOT IMPLEMENTED YET)}
\par \tab int
\par \}
\par \pard\plain \fi-1800\li1800\tx360\tx720\tx1080\tx1440\tx1800 \f2\fs20\lang1033 END{\f3 \tab \tab \tab \tab }{\f32 // }Optional
\par
\par \pard \fi-1800\li1800\tx1080 See also\tab {\uldb Resource Description Files (RDF)}{\v\fs18\cf6 ResourceDescriptionFiles_RDF_}{\f3
\par }\pard\plain \s6\li101\sa86\keepn \b\f2\lang1033 {\plain \f2\fs18\up6\lang1033 \page #{\footnote \pard\plain \s245\li100 \f2\fs20\lang1033 {\fs18\up6 #} Localization}}{\plain \f2\fs18\up6\lang1033 ${\footnote \pard\plain \s245\li100 \f2\fs20\lang1033 {
\fs18\up6 $} Localization}}{\plain \f2\fs18\up6\lang1033 }Localization
\par \pard\plain \li100 \f2\fs20\lang1033 Throughout this document, the term {\b localization}
refers to the process of preparing a product for an international market. This process involves (among other things) translating text and resizing controls such as dialogs and buttons. A person performing localization is referred to as a {\b localizer}
.
\par \pard\plain \s6\li101\sa86\keepn \b\f2\lang1033 \page {\plain \f2\fs18\up6\lang1033 #{\footnote \pard\plain \s245\li100 \f2\fs20\lang1033 {\fs18\up6 #} LanguagesSupportedByWindowsNT}}{\plain \f2\fs18\up6\lang1033 ${\footnote \pard\plain \s245\li100
\f2\fs20\lang1033 {\fs18\up6 $} Languages Supported by Windows NT}}{\plain \f2\fs18\up6\lang1033 }Languages Supported by Windows NT
\par \pard\plain \li101\keepn\tx2880\tx6030 \f2\fs20\lang1033 {\b\f30\ul Primary Language ID's\tab Sub language ID's}{\f30\ul \tab }{\f30\fs18\ul
\par }\pard \li100\tx1800\tx2880\tx5760 {\f30\fs18 Neut}{\f30\fs18 ral\tab 0x00\tab Neutral\tab 0x00
\par }{\f30\fs18 Albanian\tab 0x1c\tab Default\tab 0x01
\par }{\f30\fs18 Arabic\tab 0x01\tab System Default\tab 0x02
\par }{\f30\fs18 Bahasa\tab 0x21\tab Arabic (Saudia Arabia)\tab 0x04
\par }{\f30\fs18 Bulgarian\tab 0x02\tab Arabic (Iraq)\tab 0x08
\par }{\f30\fs18 Byelorussian\tab 0x23\tab Arabic (Egypt)\tab 0x0C
\par }{\f30\fs18 Catalan \tab 0x03\tab Arabic (Libya)\tab 0x10
\par }{\f30\fs18 Chinese\tab 0x04\tab Arabic (Algeria)\tab 0x14
\par }{\f30\fs18 Czech\tab 0x05\tab Arabic (Morocco)\tab 0x18
\par }{\f30\fs18 Danish\tab 0x06\tab Arabic (Tuinisa)\tab 0x1C
\par }{\f30\fs18 Dutch\tab 0x13\tab Arabic (Oman)\tab 0x20
\par }{\f30\fs18 English \tab 0x09\tab Arabic (Yemen)\tab 0x24
\par }{\f30\fs18 Estonian\tab 0x25\tab Arabic (Syria)\tab 0x28
\par }{\f30\fs18 Farsi\tab 0x29\tab Arabic (Jordan)\tab 0x2C
\par }{\f30\fs18 Finnish\tab 0x0b\tab Arabic (Lebanon)\tab 0x30
\par }{\f30\fs18 Fre}{\f30\fs18 nch\tab 0x0c\tab Arabic (Kuwait)\tab 0x34
\par }{\f30\fs18 German\tab 0x07\tab Arabic (U.A.E.)\tab 0x38
\par }{\f30\fs18 Greek\tab 0x08\tab Arabic (Bahrain)\tab 0x3C
\par }{\f30\fs18 Hebrew\tab 0x0d\tab Arabic (Qatar)\tab 0x40
\par }{\f30\fs18 Hungarian\tab 0x0e\tab Chinese (Traditional)\tab 0x01
\par }{\f30\fs18 Icelandic\tab 0x0f\tab Chinese (Simplified)\tab 0x02
\par }{\f30\fs18 Italian \tab 0x10\tab Chinese (Taiwan)\tab 0x04
\par }{\f30\fs18 Japanese\tab 0x11\tab Chinese (PRC)\tab 0x08
\par }{\f30\fs18 Kampuchean\tab 0x2c\tab Chinese (Hong Kong)\tab 0x0C
\par }{\f30\fs18 Korean\tab 0x12\tab Chinese (Singapore)\tab 0x10
\par }{\f30\fs18 Laotian\tab 0x2b\tab Dutch\tab 0x01
\par }{\f30\fs18 Latvian\tab 0x26\tab Dutch (Belgian) \tab 0x02
\par }{\f30\fs18 Lithuanian\tab 0x27\tab English (US)\tab 0x01
\par }{\f30\fs18 Maori\tab 0x28\tab English (UK)\tab 0x02
\par }{\f30\fs18 Norwegian\tab 0x14\tab Eng}{\f30\fs18 lish (Australian)\tab 0x03
\par }{\f30\fs18 Polish\tab 0x15\tab English (Canadian)\tab 0x04
\par }{\f30\fs18 Portuguese\tab 0x16\tab English (New Zealand)\tab 0x05
\par }{\f30\fs18 Rhaeto Roman\tab 0x17\tab English (Ireland)\tab 0x06
\par }{\f30\fs18 Romanian\tab 0x18\tab French\tab 0x01
\par }{\f30\fs18 Russian\tab 0x19\tab French (Belgian)\tab 0x02
\par }{\f30\fs18 Serbo Croatian\tab 0x1a\tab French (Canadian)\tab 0x03
\par }{\f30\fs18 Slovak\tab 0x1b\tab French (Swiss)\tab 0x04
\par }{\f30\fs18 Spanish \tab 0x0a\tab German\tab 0x01
\par }{\f30\fs18 Swedish \tab 0x1d\tab German (Swiss)\tab 0x02
\par }{\f30\fs18 Thai\tab 0x1e\tab German (Austrian)\tab 0x03
\par }{\f30\fs18 Turkish \tab 0x1f\tab Hebrew (Israel)\tab 0x04
\par }{\f30\fs18 Ukrainian\tab 0x22\tab Italian\tab 0x01
\par }{\f30\fs18 Urdu\tab 0x20\tab Italian (Swiss)\tab 0x02
\par }{\f30\fs18 Vietnamese\tab 0x2a\tab Japanese (Japan)}{\f30\fs18 \tab 0x04
\par }{\f30\fs18 \tab \tab Korean (Korea)\tab 0x04
\par }{\f30\fs18 \tab \tab Norwegian (Bokmal)\tab 0x01
\par }{\f30\fs18 \tab \tab Norwegian (Nynorsk)\tab 0x02
\par }{\f30\fs18 \tab \tab Portuguese (Brazilian)\tab 0x01
\par }{\f30\fs18 \tab \tab Portuguese\tab 0x02
\par }{\f30\fs18 \tab \tab Serbo Croatian (Latin)\tab 0x01
\par }{\f30\fs18 \tab \tab Serbo Croatian (Cyrillic)\tab 0x02
\par }{\f30\fs18 \tab \tab Spanish (Traditional Sort)\tab 0x01
\par }{\f30\fs18 \tab \tab Spanish (Mexican)\tab 0x02
\par }{\f30\fs18 \tab \tab Spanish (Modern Sort)\tab 0x03
\par }{\f30\fs18 \tab \tab Thai (Thailand)\tab 0x04
\par }\pard\plain \s8\li100 \f2\fs20\lang1033
\par }