Adding new dictionaries to aspell: Difference between revisions

(Reverted spam)
(Updating this document to be accurate to Zimbra 8.7, and removing some old 4.X text which is no longer relevant.)
 
(2 intermediate revisions by 2 users not shown)
Line 1: Line 1:
ZCS 6.0 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
=Adding new dictionaries to aspell=
<tt>
<div class="col-md-12 ibox-content">
::/opt/zimbra/aspell/bin/aspell dump dicts
{{KB|{{Unsupported}}|{{ZCS 8.7}}||}}
</tt>
 
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.
If you do not see your language in the list, follow the instructions below.


== How to add a new dictionary to aspell ==
== 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:


* Download the dictionary from [ftp://ftp.gnu.org/gnu/aspell/dict ftp.gnu.org/gnu/aspell/dict]
./configure
* Extract it from the tar file in a zimbra work directory
make
* Set Zimbra's aspell in the path in /opt/zimbra/.bashrc with:
make install
::<tt>PATH=/opt/zimbra/aspell-0.60.3/bin:$PATH</tt>
* Change your login to "zimbra" (su zimbra)
* Configure and install the dictionary according to the README
<tt>
::./configure
::make
::make install
</tt>
* Verify the datadir and dictdir it must be '''/opt/zimbra/aspell-0.60.6/lib/aspell-0.60'''


== Changes required for ZCS 5.0 and earlier ==
* Verify the datadir and dictdir it must be '''/opt/zimbra/common/lib/aspell-0.60'''
The following information is for ZCS versions 5.x or earlier.  Starting with ZCS 6.x, the client passes the name of the dictionary to the server and multibyte character sets are handled properly.


* Edit the file /opt/zimbra/httpd/htdocs/aspell.php to reference the new dictionary.  For example to add the french dictionary:
You must reload the spell-service:
sudo -u zimbra /opt/zimbra/bin/zmspellctl reload


<tt>
{{Article_Footer|Zimbra Collaboration Suite 8.7|3/9/2017}}
::$locale = "en_EN";
::TO
::$locale = "fr_FR";
</tt>
 
<b>NOTE (fr):</b> Read the README on the dict source directory to choice the right setup (fr_FR-40, fr_FR-60, etc)<br>
<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
 
This file is located at /opt/zimbra/httpd/htdocs/aspell.php. Replace this block (line 82 or so)
 
<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