<html><head>
	  <title>Spelling / Hyphenation Install</title>
	  <meta HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8">
  </head>
  <body>
		<a href="download_dictionary.html">return to Table of Contents</a><br />
				
    <table width="80%" border="0" cellpadding="0" cellspacing="0">
      <tr>
        <td>
          <h2 align="center">Non-automated Spelling / Hyphenation Installation</h2>
					<br />
          
          <h3 align="left"><a name="installspell">Non-automated Spelling Installation</a></h3>
         
          <ol>
            <li>To install these dictionaries in build OO641C, OOo100, OOo101, OOo102, or later:</li>
            <li>Close all open OOo windows and the Quickstarter, before installing and editing the dictionary.lst file.</li>
            <li>Copy the compressed dictionary file into OpenOffice.org <font face="Courier New,Courier, mono">/share/dict/ooo/</font>
            and unzip it.</li>
            <li>Edit the dictionary.lst file in that <b>same</b> directory (create it if it doesn't exist) using a text editor, <br />
            to register a dictionary for a specific locale (the same dictionary can be registered for multiple locales).<br />

              <p><b>For example:</b><br />
              To add the <font face="Courier New, Courier, mono">de_DE.zip</font> dictionary under the German (Germany) locale to OOo,
              you would:</p>
              <table width="75%" border="0" bgcolor="#CCCCCC">
                <tr>
                  <td><font face="Courier New, Courier, mono"><b>cd c:\Program_Files\OOo101\user\wordbook\<br />
                  or<br />
                  cd c:\Program_Files\OOo102\share\dict\ooo\<br />
                  or<br />
                  cd /home/jrandom/OOo101/user/wordbook/<br />
                  or<br />
                  cd /home/jrandom/OOo102/share/dict/ooo/</b><br />
                  <br />
                  unzip de_DE.zip</font></td>
                </tr>
              </table><br />
              <br />
              <br />

              <p>And then using a text editor add the following line to dictionary.lst:</p>

              <table width="75%" border="0" bgcolor="#CCCCCC">
                <tr>
                  <td><b><font face="Courier New, Courier, mono">DICT de DE de_DE</font></b></td>
                </tr>
              </table>This line tells OOo to register the affix file <font face="Courier New, Courier, mono">de_DE.aff</font> 
              and the wordlist <font face="Courier New, Courier, mono">de_DE.dic</font> to the locale, de DE,<br />
              which is German (Germany). Save the changes.<br />
              <br />
              The specific fields of this line are:<br />
              &nbsp;&nbsp;Field 1: Entry Type "DICT" marks the entry as a dictionary pattern descriptor<br />
              &nbsp;&nbsp;Field 2: Language code from Locale "en" or "de" or "pt" ...
                (see <a href="http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt">ISO Language Code</a> page)<br />
              &nbsp;&nbsp;Field 3: Country code from Locale "US" or "GB" or "PT" ...
                (see <a href="http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html">ISO Country Code</a> page)<br />
              &nbsp;&nbsp;Field 4: Root name of Dictionary "english" or "en_US" or ... (do not add the .aff or .dic extensions to the name)<br />
              <br />
            </li>

            <li>Now, start up OpenOffice.org, and click on:<br />
            <b>Tools-&gt;Options-&gt;LanguageSettings-&gt;WritingAids</b><br />
            Hit "<b>Edit</b>" and use the pull down menu to select your locale<br />
            and then, make sure to check the MySpell/Hunspell Spell Checker for that locale.</li>
          </ol>

          <p>That's it! Your spelling dictionary is installed and registered for that language.</p>

          <p><b>Note:</b> Windows users may need to exit OpenOffice.org and close the QuickStarter <br />
          before being able to access the hyphenation patterns, since the QuickStarter caches the contents <br />
          of dictionary.lst and the changes are not seen until the next reload.</p>
          <hr />
          <br />
      		<a href="download_dictionary.html">return to Table of Contents for Writer's Aids</a>
          <br />
          <br />
          
          <h3 align="left"><a name="installhyph">Non-automated Hyphenation Installation</a></h3>
                            
        <p>Unpack the archive into the directory <font
                face="Courier">&lt;OpenOffice.org installation directory&gt;/share/dict/ooo</font></p>

        <p>Open the file "dictionary.lst" present in that
        directory in your favourite text editor and add the following line: </p>

        <ol>
        <table width="25%" border="10%" bgcolor="#C0C0C0">
            <tr>
                <td><font face="Courier"><b>HYPH it IT hyph_it</b></font></td>
            </tr>
                <td>Save the changes. </td>
        </table>
        <br />
        <p>The meaning of the fields are as follows:</p>
            <ol>
                <p>Field 1: "HYPH" marks the entry as a hyphenation pattern descriptor.<br />
                        Field 2: Language code from Locale "en" or "it" or "pt" or etc.
                        (see <a href="http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt">ISO Language Code</a> page)<br />
                        Field 3: Country code from Locale "IT"  ... (see <a href="http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html">
                        ISO Country Code</a> page)<br />
                        Field 4: Name of the file containing the patterns (without extention).<br /><br /><br />
                </p>
            </ol>
                <p>Now start up OpenOffice.org and go to:</p>

                <p><b>Tools->Options->LanguageSettings->WritingAids</b></p>

                <p>Hit "<b>Edit</b>" and use the pull down menu to select the language you want to add;
                check the box next to ALTLinux LibHnj Hyphenator.<br /><br /></p>

                <p>That's it! Your hyphenation dictionary is installed and registered for that language.<br /><br /></p>

                <p><b>Note:</b> Windows users may need to exit OpenOffice.org and
                close the QuickStarter before being able to access the
                hyphenation patterns, <br />since the QuickStarter caches the
                contents of dictionary.lst and the changes are not seen
                until the next reload.<br /></p>
        </ol>
				<hr>

				<p><a href="download_dictionary.html">return to Table of Contents for Writer's Aids</a></p>

        </td>
      </tr>
    </table>
  </body>
</html>
