diff -Nru language-selector-0.79.1/LanguageSelector/LangCache.py language-selector-0.79.2/LanguageSelector/LangCache.py --- language-selector-0.79.1/LanguageSelector/LangCache.py 2012-02-06 11:32:29.000000000 +0000 +++ language-selector-0.79.2/LanguageSelector/LangCache.py 2013-02-28 16:14:55.000000000 +0000 @@ -115,8 +115,12 @@ #print "XXX pkg list for lang %s, installed: %s" % (item.languageCode, str(item.installed)) try: if item.installed: + # We are selective when deleting language support packages to + # prevent removal of packages that are not language specific. for pkgname in pkgs: - self[pkgname].mark_delete() + if pkgname.startswith('language-pack-') or \ + pkgname.endswith('-' + li.languageCode): + self[pkgname].mark_delete() else: for pkgname in pkgs: self[pkgname].mark_install() diff -Nru language-selector-0.79.1/LanguageSelector/LanguageSelector.py language-selector-0.79.2/LanguageSelector/LanguageSelector.py --- language-selector-0.79.1/LanguageSelector/LanguageSelector.py 2012-02-06 10:45:39.000000000 +0000 +++ language-selector-0.79.2/LanguageSelector/LanguageSelector.py 2013-02-28 16:14:55.000000000 +0000 @@ -40,8 +40,10 @@ os.path.join(self._datadir, "data", "pkg_depends")) else: ls = language_support_pkgs.LanguageSupport(self._cache) - - return ls.by_locale(self._localeinfo.getSystemDefaultLanguage()[0]) + missing = [] + for pack in ls.missing(): # ls.missing() returns a set; we need a list + missing.append(pack) + return missing def writeSysFormatsSetting(self, sysFormats): """ write various LC_* variables (e.g. de_DE.UTF-8) """ diff -Nru language-selector-0.79.1/debian/changelog language-selector-0.79.2/debian/changelog --- language-selector-0.79.1/debian/changelog 2013-02-13 16:44:56.000000000 +0000 +++ language-selector-0.79.2/debian/changelog 2013-02-28 16:14:55.000000000 +0000 @@ -1,3 +1,26 @@ +language-selector (0.79.2) precise-proposed; urgency=low + + * LanguageSelector/LanguageSelector.py: + Call missing() in language_support_pkgs.py instead of + by_locale(), so the check for missing language support packages + is carried out for all the installed languages, not only for the + current system language (LP: #1134364). + * language_support_pkgs.py: + - Hack to prevent that users are prompted to install hunspell-de-xx + when the enhanced (and conflicting) hunspell-de-xx-frami is + installed (LP: #1103547). + - Changes in available_languages() to avoid that users are prompted + to install language support for non-installed languages. That + could happen if there were other locales on the system but the + locales representing the installed languages (LP: #1134364). + * LanguageSelector/LangCache.py: + When a language is removed, don't remove packages that are not + language specific (LP: #37707). + * debian/control: + Bump the accountsservice dependency. + + -- Gunnar Hjalmarsson Wed, 27 Feb 2013 16:44:00 +0100 + language-selector (0.79.1) precise; urgency=low * check-language-support: De-duplicate output for a single target language diff -Nru language-selector-0.79.1/debian/control language-selector-0.79.2/debian/control --- language-selector-0.79.1/debian/control 2012-03-27 05:58:40.000000000 +0000 +++ language-selector-0.79.2/debian/control 2013-02-28 16:14:55.000000000 +0000 @@ -16,7 +16,6 @@ Package: language-selector-gnome Architecture: all Depends: language-selector-common (= ${binary:Version}), - accountsservice (>= 0.6.15-2ubuntu3), ${misc:Depends}, ${python:Depends}, python-gi, @@ -82,7 +81,7 @@ python-apt (>= 0.7.12.0), python-dbus, dbus, - accountsservice (>= 0.6.15-2ubuntu3) + accountsservice (>= 0.6.15-2ubuntu9.5) XB-Python-Version: ${python:Versions} Description: Language selector for Ubuntu This package let you change and install language packs diff -Nru language-selector-0.79.1/language_support_pkgs.py language-selector-0.79.2/language_support_pkgs.py --- language-selector-0.79.1/language_support_pkgs.py 2012-03-27 06:27:05.000000000 +0000 +++ language-selector-0.79.2/language_support_pkgs.py 2013-02-28 16:14:55.000000000 +0000 @@ -106,39 +106,45 @@ packages = set() for lang in self.available_languages(): packages.update(self.by_locale(lang, installed)) - return packages + return self._hunspell_frami_special(packages) + + def _hunspell_frami_special(self, packages): + ''' Ignore missing hunspell-de-xx if hunspell-de-xx-frami is installed. + + https://launchpad.net/bugs/1103547 + ''' + framis = [] + for country in ['de', 'at', 'ch']: + frami = 'hunspell-de-' + country + '-frami' + try: + if self.apt_cache[frami].installed: + framis.append(frami) + except KeyError: + pass + if len(framis) == 0: + return packages + packages_new = set() + for pack in packages: + if pack + '-frami' not in framis: + packages_new.add(pack) + return packages_new def available_languages(self): '''List available languages in the system. - This calls "locale -a" and filters the result for language codes, so - that iterating over it is a lot smaller than iterating over the full - locale list. As some languages like English, Portugese, or Chinese have - meaningful territory codes, these are kept. - The list items can be passed as the "locale" argument of by_locale(), by_package_and_locale(), etc. ''' languages = set() - locales = subprocess.check_output(['locale', '-a']).decode() - for locale in locales.splitlines(): - locale = locale.split('.')[0] - if '_' not in locale: - continue - - lang = locale.split('_')[0] - - # languages where territory is deciding - if lang == 'zh': - languages.add(locale) - continue - # languages where territory is relevant; keep the general language, - # too + lang_string = subprocess.check_output( + ['/usr/share/language-tools/language-options'], + universal_newlines=True) + + for lang in lang_string.split(): languages.add(lang) - if locale in ['en_AU', 'en_GB', 'en_US'] or lang in ['es', 'pt', - 'zh']: - languages.add(locale) + if not lang.startswith('zh_'): + languages.add(lang.split('_')[0]) return languages