Version history :

  • v5, Wednesday 13 March 2013 : added download links for nbbuild and spellchecker.dictionary_en projects
  • v4, Friday 1st March 2013 : update for NetBeans 7.3.0
  • v3, Monday 17 December 2012 : removed the note in step 6 and added a command-line example for the keytool program
  • v2, Thursday 5 July 2012 : added a note in step 6, about keytool utility and Java version
  • v1, Thursday 24 May 2012 : original version

Step 1 : expand GNU Aspell dictionaries files

Download Aspell. You can get the latest Win32 installer version from ftp://ftp.gnu.org(...)Aspell-0-50-3-3-Setup.exe. Run it to install Aspell.
Download the latest French dictionaries file. You can get Win32 installers from ftp://ftp.gnu.org/gnu/aspell/w32/. The latest French dictionnaries file is Aspell-fr-0.50-3-3.exe. Run it to install the French dictionaries into Aspell.

You can now expand the dictionaries files you want to include in the future NetBeans plugin. We'll expand the fr_FR and fr_CH dictionaries. Go to the dict directory of Aspell and run the following commands (if necessary, add the Aspell bin directory to your PATH variable, in the Operating System or a batch script) :

aspell --lang=fr_FR --master=fr_FR dump master | sort > aspell_dump_fr_FR.txt
aspell --lang=fr_CH --master=fr_CH dump master | sort > aspell_dump_fr_CH.txt

The first line will expand and sort the fr_FR dictionary to the default output. The > switch is used to save the output to a file (aspell_dump_fr_FR.txt), in the current directory. The second line does the same job with the fr_CH language.

You'll note that the expanded dictionaries files may not be UTF-8 encoded. If necessary, re-encode them to UTF-8. You can do it with Notepad2 : open a file and go to File, Encoding, and select the UTF-8 encoding. It will encode the opened file.

To finish, pack the two files into a ZIP file (you can do it with every ZIP archiver, like 7-Zip). We will call this archive aspell-frwl.zip :

SpellcheckerFrenchDictionaries_dict_zip.png

Nota n°1 : What does "expand a dictionary file" means ? Aspell dictionaries files are a set of words and affixes lists. Word lists contains basic forms of common words. Affixes are used to compute the different variations of words. By expanding a dictionary , we ask Aspell to compute a list of all words with all their variations. The result is a huge file. We need to expand dictionaries files because the NetBeans Spellchecker (seems to) use only expanded dictionaries files : it doesn't support affixes lists ;)

Nota n°2 : These are the MS Windows instructions. Linux and MacOS ones should be easy to find.

Step 2 : checkout the NetBeans 7.3.0 FCS sources from Mercurial repository

Refer to the previous tutorial : How to build NetBeans from sources, step 1 only.

After that, you need at least two directories : releases/nbbuild/ and releases/spellchecker.dictionary_en/. If you want to free some space, you can delete the other directories.
You can now start your NetBeans IDE and load the spellchecker.dictionary_en project.

Alternative:

You can download the nbbuild and spellchecker.dictionary_en projects from Sourceforge.net :

Step 3 : open the English dictionary project and make a copy

SpellcheckerEnglishDictionaries_prjCpy.png

NetBeans will ask you for a new project name. Choose something like spellchecker.dictionary_fr :

SpellcheckerEnglishDictionaries_prjCpy_ChgName.png

Actually, the project name you have chosen is the project's folder name. NetBeans will show you the SpellChecker English Dictionaries (0) title for your project. Rename it (you can use the F2 key on the project's name) to SpellChecker French Dictionaries :

SpellcheckerEnglishDictionaries_prjCpy_ChgName2.png

You now have the two projects, English and French dictionaries plugin projects :

SpellcheckerEnglishDictionaries_prjFrNamed.png

Step 4 : modify the copied project

The French project is correctly named, so we can now modify its content to target French dictionaries.
Switch to the File project tab to show more files.

Step 4.1 : empty the external directory's content and copy your French dictionaries archive file

This directory contains the English dictionaries files. We will provide our own files.
Delete the files located into the external directory and copy the aspell-frwl.zip created during step 1.

Step 4.2 : edit the nbproject/project.properties file

Replace :

release.external/ispell-enwl-3.1.20.zip=modules/dict/ispell-enwl-3.1.20.zip
jnlp.indirect.files=modules/dict/dictionary_en_US.description,modules/dict/dictionary_en_GB.description,modules/dict/ispell-enwl-3.1.20.zip,modules/dict/dictionary_en.description

by :

release.external/aspell-frwl.zip=modules/dict/aspell-frwl.zip
jnlp.indirect.files=modules/dict/dictionary_fr_FR.description,modules/dict/dictionary_fr_CH.description,modules/dict/aspell-frwl.zip,modules/dict/dictionary_fr.description

We have replaced references to English dictionary and locales by French ones.

Step 4.3 : edit the nbproject/project.xml file

Replace :

<code-name-base>org.netbeans.modules.spellchecker.dictionary_en</code-name-base>

by :

<code-name-base>org.netbeans.modules.spellchecker.dictionary_fr</code-name-base>

Step 4.4 : rename the src/org/netbeans/modules/spellchecker/dictionary_en/ folder

Rename the dictionary_en folder to dictionary_fr.

Step 4.5 : edit the src/org/netbeans/modules/spellchecker/dictionary_fr/Bundle.properties file

Replace :

OpenIDE-Module-Display-Category=Base IDE
OpenIDE-Module-Long-Description=\
    Provides Ispell's (ver. 3.1.20) word list for use in the online spellchecker.
OpenIDE-Module-Name=Spellchecker English Dictionaries
OpenIDE-Module-Short-Description=English Dictionaries for Spellchecker

by something like :

OpenIDE-Module-Display-Category=Base IDE
OpenIDE-Module-Long-Description=\
    Provides Aspell's French word list for use in the online spellchecker.
OpenIDE-Module-Name=Spellchecker French Dictionaries
OpenIDE-Module-Short-Description=French Dictionaries for Spellchecker

This file describes your plugin. Do not hesitate to change the description fields.

Step 4.6 : edit the build.xml file

Replace :

<project name="spellchecker.dictionary_en" default="netbeans" basedir=".">

by :

<project name="spellchecker.dictionary_fr" default="netbeans" basedir=".">

Step 4.7 : edit the manifest.mf file

Replace :

Manifest-Version: 1.0
OpenIDE-Module: org.netbeans.modules.spellchecker.dictionary_en
XOpenIDE-Module-Layer: org/netbeans/modules/spellchecker/dictionary_en/layer.xml
OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/spellchecker/dictionary_en/Bundle.properties
OpenIDE-Module-Specification-Version: 1.8.1

by :

Manifest-Version: 1.0
OpenIDE-Module: org.netbeans.modules.spellchecker.dictionary_fr
XOpenIDE-Module-Layer: org/netbeans/modules/spellchecker/dictionary_fr/layer.xml
OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/spellchecker/dictionary_fr/Bundle.properties
OpenIDE-Module-Specification-Version: 1.0

Please note we have changed the plugin version, from 1.8.1 to 1.0.

Step 4.8 : rename and edit the release/module/dict/dictionary_en.description file

Rename the dictionary_en.description file to dictionary_fr.description.

After that, replace :

jar:nbinst:///modules/dict/ispell-enwl-3.1.20.zip!/english.0
jar:nbinst:///modules/dict/ispell-enwl-3.1.20.zip!/english.1
jar:nbinst:///modules/dict/ispell-enwl-3.1.20.zip!/english.2
jar:nbinst:///modules/dict/ispell-enwl-3.1.20.zip!/english.3
jar:nbinst:///modules/dict/ispell-enwl-3.1.20.zip!/american.0
jar:nbinst:///modules/dict/ispell-enwl-3.1.20.zip!/american.1
jar:nbinst:///modules/dict/ispell-enwl-3.1.20.zip!/american.2

by :

jar:nbinst:///modules/dict/aspell-frwl.zip!/aspell_dump_fr_FR.txt
jar:nbinst:///modules/dict/aspell-frwl.zip!/aspell_dump_fr_CH.txt

Some explanations : our plugin will contain dictionaries for the fr, fr_FR and fr_CH locales. We have a .description file for each of them. In these files, we locate the word list(s) to use. So, the fr locale is the combination of the fr_FR and fr_CH word lists. The fr_FR locale uses the fr_FR word list, and the fr_CH locale uses the fr_CH word list.
Here, we have edited the description file of the fr locale. Let's do it for the other ones :)

Nota : The aspell-frwl.zip! syntax means that we enter into a ZIP file.

Step 4.9 : rename and edit the release/module/dict/dictionary_en_GB.description file

Rename the dictionary_en_GB.description file to dictionary_fr_FR.description.

After that, replace :

jar:nbinst:///modules/dict/ispell-enwl-3.1.20.zip!/english.0
jar:nbinst:///modules/dict/ispell-enwl-3.1.20.zip!/english.1
jar:nbinst:///modules/dict/ispell-enwl-3.1.20.zip!/english.2
jar:nbinst:///modules/dict/ispell-enwl-3.1.20.zip!/english.3
jar:nbinst:///modules/dict/ispell-enwl-3.1.20.zip!/british.0
jar:nbinst:///modules/dict/ispell-enwl-3.1.20.zip!/british.1
jar:nbinst:///modules/dict/ispell-enwl-3.1.20.zip!/british.2

by :

jar:nbinst:///modules/dict/aspell-frwl.zip!/aspell_dump_fr_FR.txt

Step 4.10 : rename and edit the release/module/dict/dictionary_en_US.description file

Rename the dictionary_en_US.description file to dictionary_fr_CH.description.

After that, replace :

jar:nbinst:///modules/dict/ispell-enwl-3.1.20.zip!/english.0
jar:nbinst:///modules/dict/ispell-enwl-3.1.20.zip!/english.1
jar:nbinst:///modules/dict/ispell-enwl-3.1.20.zip!/english.2
jar:nbinst:///modules/dict/ispell-enwl-3.1.20.zip!/english.3
jar:nbinst:///modules/dict/ispell-enwl-3.1.20.zip!/american.0
jar:nbinst:///modules/dict/ispell-enwl-3.1.20.zip!/american.1
jar:nbinst:///modules/dict/ispell-enwl-3.1.20.zip!/american.2

by :

jar:nbinst:///modules/dict/aspell-frwl.zip!/aspell_dump_fr_CH.txt

Step 5 : make the NBM file and test it

You can now launch the Build action to compile the project, and the Create NBM action to package your plugin into a NBM file (build/org-netbeans-modules-spellchecker-dictionary_fr.nbm). To test it :

  • go to the Plugins Manager (Tools / Plugins), the Downloaded tab, the Add Plugins... button, load your NBM file and confirm : your plugin is now installed !
  • you can now change the spellchecker default locale, open a text file and type a letter (only !), wait a few seconds to let Netbeans generate a cache file for the selected locale (if you don't wait, the cache creation will fail and the spellchecker won't work), and try to use the spellchecker correction.
    This is explained in my French Dictionary Plugin page.

SpellcheckerFrenchDictionaries_hints.png

Nota : If you don't wait the cache creation, the spellchecker won't work for the selected locale. You can go to your .netbeans/7.x.y/var/cache/dict/ directory and delete the corresponding .trie1 file. Restart NetBeans to let it to recreate a cache file.

Step 6 : (optional) sign the NBM file and submit it to the community for validation

You can now publish your plugin on the NetBeans Plugins Portal (don't forget create an account). To make it available in the NetBeans Plugins Manager (Tools / Plugins), you have to submit it to validation.
Firstly, you have to sign your plugin (generate a certificate file and sign your plugin) : you'll find a tutorial at http://wiki.netbeans.org/DevFaqSignNbm. Example : keytool -genkey -storepass PASSWORD -alias ALIAS -keystore FOO.cert -validity 3651 (it will create the FOO.cert certificate file with a 3651 days validity, the ALIAS alias an the PASSWORD password. The tool will ask you additional information).

Then, you can now upload your plugin to the NetBeans Plugins Portal and ask for a validation.
Once validated, your plugin will be available in the NetBeans Plugins Manager.