Difference between revisions of "Apertium-tolk"

From Apertium
Jump to navigation Jump to search
Line 1: Line 1:
'''apertium-tolk'''<ref>No, this isn't a spalling mistake</ref> is a program which translates ''as you type''.
'''apertium-tolk'''<ref>No, this isn't a spalling mistake</ref> is a program which translates ''as you type''.

Revision as of 22:09, 7 March 2018


This page is out of date as a result of the migration to GitHub. Please update this page with new documentation and remove this warning. If you are unsure how to proceed, please contact the GitHub migration team.

apertium-tolk[1] is a program which translates as you type.

What you need

Version 0.2, pair: French to Spanish.
  • The Apertium D-Bus Service
  • A working Apertium 3.0 installation (note: this must be installed)
  • Python >= 2.4
  • A reasonably fast computer (a 1.2Ghz Pentium, with 256Mb RAM is fast enough if completely unloaded.)

If installing from SVN, you also need these prerequisites:

  • gettext
  • intltool
  • libglib2.0-dev
  • python-gi

(On Debian/Ubuntu sudo apt-get install gettext intltool libglib2.0-dev python-gi)



If you're running Debian unstable (sid), just:

sudo apt-get install apertium-tolk

There are debian packages available here. Note: any language pair you want to use will need to be installed from a Debian package as well.


Check out the apertium-tolk from the subversion repository.

svn co https://svn.code.sf.net/p/apertium/svn/trunk/apertium-tolk
# Optionally install it so you can run it from anywhere:
sudo make install
Version 0.1, pair: Macedonian to Serbo-Croatian.


Restart D-Bus

The solution to both of the problems below is typically to restart D-Bus. You can do this on Debian and Ubuntu by issuing the following command:

$ sudo /etc/init.d/dbus restart

If that does not work, try logging out and in again.

Method does not exist
org.freedesktop.DBus.Error.UnknownMethod: Method "translate" with signature "a{ss}s" on interface 
"org.apertium.Mode" doesn't exist
Unable to guess signature
  ERROR:dbus.connection:Unable to set arguments ({}, 'A') according to signature None: 
  exceptions.ValueError: Unable to guess signature from an empty dict
  Unable to guess signature from an empty dict

Install dbus-x11

If you get a message that dbus-launch is missing, like this:

  File "/var/lib/python-support/python2.4/dbus/bus.py", line 125, in __new__
    bus = cls._new_for_bus(address_or_type, mainloop=mainloop)
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ExecFailed: Failed to execute dbus-launch 
to autolaunch D-Bus session

Then in Debian/Ubuntu you need to install the dbus-x11 package.

No module named tolk

If you get a message like this:

$ apertium-tolk
** Message: pygobject_register_sinkfunc is deprecated (GtkWindow)
** Message: pygobject_register_sinkfunc is deprecated (GtkInvisible)
** Message: pygobject_register_sinkfunc is deprecated (GtkObject)
Traceback (most recent call last):
  File "/usr/local/bin/apertium-tolk", line 19, in <module>
    import tolk
ImportError: No module named tolk

you can probably fix it by setting the PYTHONPATH variable. On my system, Python by default notices modules installed into /usr, but not into /usr/local, so I had to start apertium-tolk like this:

PYTHONPATH=/usr/local/lib/python2.6/site-packages:${PYTHONPATH} apertium-tolk

For most recently version of apertium-tolk using python3:

PYTHONPATH=/usr/local/lib/python3/dist-packages:${PYTHONPATH} apertium-tolk

If you installed into some other prefix, swap /usr/local for your prefix.

You might also want to edit the "Exec" line of /usr/local/share/applications/apertium-tolk.desktop to say this.

Python encodings

If you get the following error, it means that there is a bug in apertium-tolk:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe1' in
position 1: ordinal not in range(128)

You can hack this by making a sitecustomize.py file in either /usr/lib/python2.5/site-packages/ or /usr/lib/python2.4/site-packages/ (whichever corresponds to your version of Python) with the following contents:

# sitecustomize.py
# this file can be anywhere in your Python path,
# but it usually goes in ${pythondir}/lib/site-packages/
import sys;

Note: Python 2.6 users can set sitecustomize.py locally per user under ~/.local/ (See details in doc.python.org).

(apertium-tolk should be fixed so that it decodes and encodes utf-8 correctly, see http://wiki.apertium.org/wiki/Unicode_in_Python_2.)

Machine grinds to a halt

This is probably because either you're running apertium-tolk on an old machine, or the machine is heavily loaded, if you look in your process list ($ ps axu) you will probably see many instances of Apertium running.

You can kill them using:

$ ps ax | grep apertium\/  | cut -f2 -d' ' | xargs kill

Unfortunately the only ways to stop this are either, decrease load on your current machine, buy a new machine or fix the code. Its a known issue, and we're working on it, but we could always do with some help :)

crash on update_translation_object

Traceback (most recent call last):
 File "/usr/local/bin/apertium-tolk", line 159, in on_comboPair_changed
 File "/usr/local/bin/apertium-tolk", line 155, in update_translation_object
   self.translator = dbus.Interface(self.bus.get_object("org.apertium.mode", dbus_pair_name), "org.apertium.Mode")
 File "/usr/lib/python2.6/site-packages/dbus/bus.py", line 244, in get_object
 File "/usr/lib/python2.6/site-packages/dbus/proxies.py", line 241, in __init__
   self._named_service = conn.activate_name_owner(bus_name)
 File "/usr/lib/python2.6/site-packages/dbus/bus.py", line 183, in activate_name_owner
 File "/usr/lib/python2.6/site-packages/dbus/bus.py", line 281, in start_service_by_name
   'su', (bus_name, flags)))
 File "/usr/lib/python2.6/site-packages/dbus/connection.py", line 630, in call_blocking
   message, timeout)
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ChildExited: Process /usr/local/share/apertium/dbus-1/mode.py exited with status 1

One possible reason for this is if you are (1) running an outdated version of apertium-dbus and (2) trying to run apertium-tolk (or some other dbus-program) first as one user, then as another user. A quick fix is to do

sudo chmod a+w /tmp/mode.log

Feature requests

  • Focus on text entry box, not on exit button
  • Tooltip to say "type text in this box to translate".
    • Alternatively, just put text in the box that disappears when you click.

Related software

  • Apertium-view is a similar, but more complicated GUI tool which shows you every stage of the Apertium pipeline.
  • Apertium-viewer is an improved version of Apertium-view, which does not require dbus and which is written in Java


  1. No, this isn't a spalling mistake