langupdate(1) An apt frontend for the Emdebian implementation of 'tdebs'


langupdate [[[-n] | [--dry-run ]]] [[[--suite]] string] [[[-r] | [--autoremove]]] [[[-m] | [--mirror]] string] [[[-v] | [--verbose]] integer]
langupdate {[[-?] | [-h] | [--help] | [--version]]}



is a method for synchronising the translation file support with the list of installed packages and the list of locales supported on their own machine.

langupdate uses a temporary file for the sources.list and updates it from the list of supported locales each time langupdate is run, i.e. it combines the effects of apt-get update with apt-get upgrade. tdeb packages have no dependencies so 'dist-upgrade' is not required.


Emdebian TDebs provide a method for splitting all translation files out of packages and into separate TDeb packages, organised by the locale root and source package. This allows individual users to only install translations files for the locales supported on their own machine and only for the packages installed at the time.

Note that this functionality is not available for Debian TDebs and langupdate does not install any translation packages if only Debian packages are installed as these already contain all the translation files.

langupdate is intended to support Emdebian Grip where Emdebian packages can be mixed with Debian packages.

Disc space is not cheap

Debian packages collate all available translations into a single package which can easily lead to 250Mb of unused translation files on a typical installation. Emdebian generates a single package for every translation of each Emdebian package, leading to a tenfold increase in the number of binary packages built from each source package. To solve this problem, langupdate supports a secondary apt cache so that the main apt cache can be kept as small as possible.

langupdate then queries the secondary apt cache to get a list of all translation packages (tdebs) that match the list of locales supported on the device. This list is then compared with the list of installed binaries. The translation packages that match the installed package are then installed with apt-get.

Why C and C++?

There is no direct hook into apt-get upgrade and no easy way of reading the apt-cache from C without forking a call to apt-cache itself. So I use libapt-pkg which is a C++ library. The rest of the code is C because I prefer to use the memory management of glib2. If anyone fancies porting langupdate to just C++ for use on devices that do not have room for libglib2.0-0, patches are welcome.



Request apt to purge all orphaned TDebs - either where the package has been uninstalled or the locale has become unsupported.


Display version of langupdate and exit.

-?| -h|--help

Display help message for langupdate and exit.


langupdate options


Show the cache data without installing any packages. (In autoremove mode, show the list of packages to be removed without performing the purge.)

-m|--mirror MIRROR

Override the default Emdebian mirror ( and use a different one.

--suite SUITE

Specify a different suite to check. Only suites supported by the chosen mirror will be usable. The default Emdebian mirror only supports testing and unstable or the codenames sid, lenny and (once Lenny is released) squeeze.

--verbose integer

Increase the verbosity of messages, levels between 0 and 4 are supported.


langupdate is primarily intended for Emdebian support and plans for TDebs in Debian are only at a planning stage. Emdebian packages can be identified by the em[0-9] version suffix:

Example 1.1. Example of an Emdebian version suffix in use

apt-cache show dpkg
Package: dpkg
Source: dpkg (1.14.23)
Version: 1.14.23em1
Architecture: amd64
Maintainer: Dpkg Developers <[email protected]>
Installed-Size: 1096
Pre-Depends: libc6 (>= 2.7-1), coreutils (>= 5.93-1), lzma
Replaces: manpages-de (<= 0.4-3em1), manpages-pl (<= 20051117-1em1)
Conflicts: apt (<< 0.7.7em1), aptitude (<< 0.4.7-1em1), dpkg-dev (<< 1.14.16em1), dpkg-iasearch (<< 0.11em1), sysvinit (<< 2.82-1em1)
Priority: required
Section: admin
Filename: pool/main/d/dpkg/dpkg_1.14.23em1_amd64.deb
Size: 447968

Emdebian packages already have all /usr/share/locale/* content removed, so the Emdebian TDeb does not need to Replace: the Emdebian package. There is one Emdebian TDeb per source package per locale per architecture which could, potentially, have to Replace: multiple binary packages built from the one source package in Debian. Even if the sysadmin removes files from /usr/share/locale/ manually, it is not trivial for langupdate to identify which files remain and therefore which TDebs could be safely installed. Therefore, langupdate compares the list of binary packages installed with the list of available TDebs and ignores TDebs where the binary package does not bear an Emdebian version suffix.

Unless the system includes a mix of both Debian and Emdebian packages, langupdate will report that there is nothing to do.


langupdate is heavily reliant on accurate data in the dpkg and apt data sources. The size of these data sources also has a significant impact on processing time, especially where a mix of Debian and Emdebian packages exist.

Please attach the output of apt-cache policy to all bug reports against langupdate in Debian.


langupdate was written by Neil Williams <[email protected]>.

This manual page was written by Neil Williams <[email protected]>


This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see <>.