Adding new dictionaries to aspell: Difference between revisions

(Adding Article Footer, and categories Spell and Customizing ZCS)
(Updating this document to be accurate to Zimbra 8.7, and removing some old 4.X text which is no longer relevant.)
 
(14 intermediate revisions by 7 users not shown)
Line 1: Line 1:
== How to add a new dictionary to aspell ==
=Adding new dictionaries to aspell=
<div class="col-md-12 ibox-content">
{{KB|{{Unsupported}}|{{ZCS 8.7}}||}}


ZCS 8.7 comes with dictionaries preinstalled for many languages.  ZCS versions 5.0 and earlier only have English installed.  To see the list of installed languages, run
/opt/zimbra/common/bin/aspell dump dicts


* Download the dictionary from [ftp://ftp.gnu.org/gnu/aspell/dict gnu.org]
If you do not see your language in the list, follow the instructions below.
* Extract it from the tar file in a work directory
* Set Zimbra's aspell in the path with:
::<tt>PATH=/opt/zimbra/aspell-0.60.3/bin:$PATH</tt>
* Configure and install the dictionary according to the README
<tt>
::./configure
::make
::make install
</tt>


* Edit the file /opt/zimbra/httpd/htdocs/aspell.php to reference the new dictionary.  For example to add the french dictionary:
== How to add a new dictionary to aspell ==
* Download the dictionary for the language you want from [ftp://ftp.gnu.org/gnu/aspell/dict ftp.gnu.org/gnu/aspell/dict].
* Extract it from the tar file in a temporary directory.
* Set PATH to the binary directory of Zimbra:
PATH=/opt/zimbra/common/bin:$PATH
* Configure and install the dictionary according to the README:


<tt>
./configure
::$dictionary = pspell_new("en_EN");
make
::TO
make install
::$dictionary = pspell_new("fr_FR");
</tt>


* Verify the datadir and dictdir it must be '''/opt/zimbra/common/lib/aspell-0.60'''


<b>NOTE:</b> I think is better to change the value of the variable <b>$locale</b> at the start of the file.
You must reload the spell-service:
<b>NOTE:</b> If you are using a non-english based language with special chars like tildes (spanish, for example), you have to modify aspell.php
sudo -u zimbra /opt/zimbra/bin/zmspellctl reload


This file is located at /opt/zimbra/httpd/htdocs/aspell.php. Replace this block (line 82 or so)
{{Article_Footer|Zimbra Collaboration Suite 8.7|3/9/2017}}
 
<pre><nowiki>
$suggestions = implode(",", pspell_suggest($dictionary, $word));
$misspelled .= "$word:$suggestions\n";
</nowiki></pre>
 
with this one:
<pre><nowiki>
$suggestions = implode(",", pspell_suggest($dictionary, $word));
$suggestions=iconv("iso-8859-1","UTF-8",$suggestions);
$misspelled .= "$word:$suggestions\n";
</nowiki></pre>
 
<b>NOTE:</b> After changing the aspell language restart the spellchecker as the user zimbra with the following command:
 
<pre><nowiki>
zmspellctl stop; zmspellctl start
</nowiki></pre>
 
There is also a problem when splitting words. Replace (line 48 or so)
<pre><nowiki>
$words = preg_split('/[^\w\'-] /', $text);
</nowiki></pre>
 
with this one:
<pre><nowiki>
$words = preg_split('/[^\w\'\xc0-\xfd-]+/', $text);
</nowiki></pre>
 
This regexp line should be enough for most western Europe languages (Spanish, French, German, Portuguese and Italian). It includes all ISO8859 europeean letters in the range 192-253 of the table below.
 
http://www.pemberley.com/janeinfo/latin1.gif
 
 
* To add a set of custom words see this [http://aspell.sourceforge.net/man-html/Creating-an-Individual-Word-List.html How-To]
 
 
=== Adding Latin-2 dictionary support ===
Many aspell dictionaries do not use UTF-8 encoding while UTF-8 is encoding of a choice for Zimbra suite.
This means that text should be converted from UTF-8 to ISO-8859-x, spell checked ant then misspeled and sugested word should be
translated back to UTF-8 for browser display. The following patch shows (Slovenian) modifications to Zimbra 4.5.9 spelling processor:
 
--- /opt/zimbra/httpd/htdocs/aspell.php.orig  2007-11-01 14:44:25.000000000 +0100
+++ /opt/zimbra/httpd/htdocs/aspell.php        2007-11-01 15:50:04.000000000 +0100
@@ -18,7 +18,7 @@
 
  $filename = "";
  $text = "";
-$locale = "en_EN";
+$locale = "sl_SI";
 
  if (isset($_FILES["text"])) {
      $text = file_get_contents($_FILES["text"]);
@@ -33,12 +33,17 @@
  if ($text != NULL) {
      setlocale(LC_ALL, $locale);
 
+    // Convert all text into 8-bit dictionary locale
+    $text=iconv("UTF-8", "iso-8859-2", $text);
+
      // Get rid of double-dashes, since we ignore dashes
      // when splitting words
      $text = preg_replace('/--+/', ' ', $text);
 
      // Split on anything that's not a word character, quote or dash
-    $words = preg_split('/[^\w\'-]+/', $text);
+    // $words = preg_split('/[^\w\'-]+/', $text);
+    // Do not split visible characters in the range of 0xA0-0xFF
+      $words = preg_split('/[^\w\'\xa0-\xff-]+/', $text);
 
      // Load dictionary
      $dictionary = pspell_new($locale);
@@ -79,14 +84,15 @@
          } else {
              $checked_words[$word] = 1;
          }
-
          // Check spelling
          if (!pspell_check($dictionary, $word)) {
              $suggestions = implode(",", pspell_suggest($dictionary, $word));
-            $suggestions = utf8_encode($suggestions);
              $misspelled .= "$word:$suggestions\n";
          }
      }
+  // Convert to dictionary locale
+  $suggestions=iconv("iso-8859-2","UTF-8",$suggestions);
+  $misspelled = iconv("iso-8859-2","UTF-8",$misspelled);
 
      $response = new ServerResponse();
      $response->addParameter("misspelled", $misspelled);
 
{{Article_Footer|unknown|2/22/2006}}


[[Category:Spell]]
[[Category:Customizing ZCS]]
[[Category:Customizing ZCS]]
[[Category:Spell]]

Latest revision as of 13:05, 9 March 2017

Adding new dictionaries to aspell

   KB 1295        Last updated on 2017-03-9  




0.00
(0 votes)

ZCS 8.7 comes with dictionaries preinstalled for many languages. ZCS versions 5.0 and earlier only have English installed. To see the list of installed languages, run

/opt/zimbra/common/bin/aspell dump dicts

If you do not see your language in the list, follow the instructions below.

How to add a new dictionary to aspell

  • Download the dictionary for the language you want from ftp.gnu.org/gnu/aspell/dict.
  • Extract it from the tar file in a temporary directory.
  • Set PATH to the binary directory of Zimbra:
PATH=/opt/zimbra/common/bin:$PATH
  • Configure and install the dictionary according to the README:
./configure
make
make install
  • Verify the datadir and dictdir it must be /opt/zimbra/common/lib/aspell-0.60

You must reload the spell-service:

sudo -u zimbra /opt/zimbra/bin/zmspellctl reload
Verified Against: Zimbra Collaboration Suite 8.7 Date Created: 3/9/2017
Article ID: https://wiki.zimbra.com/index.php?title=Adding_new_dictionaries_to_aspell Date Modified: 2017-03-09



Try Zimbra

Try Zimbra Collaboration with a 60-day free trial.
Get it now »

Want to get involved?

You can contribute in the Community, Wiki, Code, or development of Zimlets.
Find out more. »

Looking for a Video?

Visit our YouTube channel to get the latest webinars, technology news, product overviews, and so much more.
Go to the YouTube channel »

Jump to: navigation, search