diff options
author | Chris Lumens <clumens@redhat.com> | 2005-03-23 21:14:20 +0000 |
---|---|---|
committer | Chris Lumens <clumens@redhat.com> | 2005-03-23 21:14:20 +0000 |
commit | 68e971a9d0f3ac7e299aefe686c6e1ad8f25f96b (patch) | |
tree | 4987450ced01aa3227df29c6787225681ca6df1e | |
parent | 9e822d2730b96fb9a418070dce1138cc5fbafecd (diff) | |
download | anaconda-68e971a9d0f3ac7e299aefe686c6e1ad8f25f96b.tar.gz anaconda-68e971a9d0f3ac7e299aefe686c6e1ad8f25f96b.tar.xz anaconda-68e971a9d0f3ac7e299aefe686c6e1ad8f25f96b.zip |
Combined Language and InstallTimeLanguage in language.py into a single
class, updated the lang-table format to remove an unused column, and
changed langSupport to instLanguage everywhere to reinforce the class
merge idea.
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | dispatch.py | 8 | ||||
-rw-r--r-- | exception.py | 14 | ||||
-rwxr-xr-x | gui.py | 5 | ||||
-rw-r--r-- | installclass.py | 15 | ||||
-rw-r--r-- | instdata.py | 4 | ||||
-rw-r--r-- | iw/language_gui.py | 10 | ||||
-rw-r--r-- | iw/package_gui.py | 8 | ||||
-rw-r--r-- | lang-table | 92 | ||||
-rw-r--r-- | language.py | 340 | ||||
-rw-r--r-- | packages.py | 10 | ||||
-rw-r--r-- | text.py | 4 | ||||
-rw-r--r-- | textw/packages_text.py | 2 |
13 files changed, 248 insertions, 275 deletions
@@ -9,6 +9,17 @@ 2005-03-23 Chris Lumens <clumens@redhat.com> + * dispatch.py, exception.py, installclass.py, instdata.py, + packages.py, iw/package_gui.py, textw/packages_text.py: Renamed + langSupport to instLanguage to comply with the class merging in + language.py. + * gui.py: Updated for new language classes. + * lang-table: Remove last column, which duplicates information. + * language.py: Rewrote to combine Language and InstallTimeLanguage + into a single class, hopefully simplifying language support. + * packages.py, iw/language_gui.py: Use getNickByName as it's more + descriptive of what's actually going on. + * scripts/upd-instroot (KEEPFILE, PACKAGES): Once more, with feeling - this time for libgcc. diff --git a/dispatch.py b/dispatch.py index 42618cee1..ffd5c55cd 100644 --- a/dispatch.py +++ b/dispatch.py @@ -102,7 +102,7 @@ installSteps = [ ("networkdevicecheck", networkDeviceCheck, ("id.network", "dispatch")), ("network", ("id.network", "dir", "intf", "id")), ("firewall", ("intf", "id.network", "id.firewall", "id.security")), - ("languagesupport", ("id.langSupport",)), + ("languagesupport", ("id.instLanguage",)), ("timezone", ("id.instLanguage", "id.timezone")), ("accounts", ("intf", "id.rootPassword")), ("authentication", ("id.auth",)), @@ -110,8 +110,8 @@ installSteps = [ ("desktopchoice", ("intf", "id.instClass", "dispatch", "id.grpset")), ("findpackages", upgradeFindPackages, ("intf", "method", "id", "instPath", "dir")), - ("selectlangpackages", selectLanguageSupportGroups, ("id.grpset","id.langSupport")), - ("package-selection", ("id.grpset", "id.langSupport", "id.instClass", "dispatch")), + ("selectlangpackages", selectLanguageSupportGroups, ("id.grpset","id.instLanguage")), + ("package-selection", ("id.grpset", "id.instLanguage", "id.instClass", "dispatch")), ("indivpackage", ("id.grpset",)), ("handleX11pkgs", handleX11Packages, ("dir", "intf", "dispatch", "id", "instPath")), @@ -137,7 +137,7 @@ installSteps = [ ("writeconfig", writeConfiguration, ("id", "instPath")), ("firstboot", firstbootConfiguration, ("id", "instPath")), ("instbootloader", writeBootloader, ("intf", "instPath", "id.fsset", - "id.bootloader", "id.langSupport", + "id.bootloader", "id.instLanguage", "id.grpset")), ("bootdisk", ("dir", "dispatch", "id.fsset")), ("makebootdisk", makeBootdisk, ("intf", "dir", "id.floppyDevice", diff --git a/exception.py b/exception.py index 0ec925955..7b716350f 100644 --- a/exception.py +++ b/exception.py @@ -50,10 +50,10 @@ def dumpClass(instance, fd, level=0, parentkey=""): "id.instLanguage.font", "id.instLanguage.kbd", "id.instLanguage.tz", - "id.langSupport.langInfoByName", - "id.langSupport.langNicks", - "id.langSupport.langList", - "id.langSupport.allSupportedLangs", + "id.instLanguage.langInfoByName", + "id.instLanguage.langNicks", + "id.instLanguage.langList", + "id.instLanguage.allSupportedLangs", "id.rootPassword", "id.tmpData", "id.xsetup.xhwstate.monitor.monlist", @@ -166,9 +166,9 @@ def dumpException(out, text, tb, dispatch): # if dispatch.id.xsetup and dispatch.id.xsetup.xhwstate and dispatch.id.xsetup.xhwstate.monitor: # dispatch.id.xsetup.xhwstate.monitor.monlist = None # dispatch.id.xsetup.xhwstate.monitor.monids = None -# dispatch.id.langSupport.langNicks = None -# dispatch.id.langSupport.langList = None -# dispatch.id.langSupport.allSupportedLangs = None +# dispatch.id.instLanguage.langNicks = None +# dispatch.id.instLanguage.langList = None +# dispatch.id.instLanguage.allSupportedLangs = None # dispatch.intf.icw.buff = None # except: # pass @@ -766,8 +766,9 @@ class InstallInterface: id.fsset.registerWaitWindow(self.waitWindow) parted.exception_set_handler(partedExceptionWindow) - lang = id.instLanguage.getCurrent() - lang = id.instLanguage.getLangNick(lang) + lang = id.instLanguage.getCurrent() + id.instLanguage.setRuntimeLanguage (lang) + id.instLanguage.setDefault (lang) self.icw = InstallControlWindow (self, self.dispatch, lang) self.icw.run (self.runres, configFileData) diff --git a/installclass.py b/installclass.py index 283d9781c..b50fa878f 100644 --- a/installclass.py +++ b/installclass.py @@ -347,24 +347,23 @@ class BaseInstallClass: def setLanguageSupport(self, id, langlist): if len (langlist) == 0: - id.langSupport.setSupported(id.langSupport.getAllSupported()) + id.instLanguage.setSupported(id.instLanguage.getAllSupported()) else: newlist = [] for lang in langlist: - newlist.append(id.langSupport.getLangNameByNick(lang)) + newlist.append(id.instLanguage.getLangNameByNick(lang)) - default = id.langSupport.getDefault() + default = id.instLanguage.getDefault() if default not in newlist: newlist.append(default) - id.langSupport.setSupported(newlist) + id.instLanguage.setSupported(newlist) def setLanguageDefault(self, id, default): - id.langSupport.setDefault(id.langSupport.getLangNameByNick(default)) + id.instLanguage.setDefault(default) - def setLanguage(self, id, lang): - instLangName = id.instLanguage.getLangNameByNick(lang) - id.instLanguage.setRuntimeLanguage(instLangName) + def setLanguage(self, id, nick): + id.instLanguage.setRuntimeLanguage(nick) def setDesktop(self, id, desktop): id.desktop.setDefaultDesktop (desktop) diff --git a/instdata.py b/instdata.py index 552f54c95..75a07140b 100644 --- a/instdata.py +++ b/instdata.py @@ -55,7 +55,6 @@ class InstallData: # - The install language # - The keyboard - self.langSupport = language.Language() self.instClass = None self.network = network.Network() self.zfcp = zfcp.ZFCP() @@ -113,7 +112,7 @@ class InstallData: self.isHeadless = isHeadless def write(self, instPath): - self.langSupport.write (instPath) + self.instLanguage.write (instPath) if not self.isHeadless: self.keyboard.write (instPath) @@ -169,7 +168,6 @@ class InstallData: break self.instLanguage.writeKS(f) - self.langSupport.writeKS(f) if not self.isHeadless: self.keyboard.writeKS(f) self.xsetup.writeKS(f, self.desktop) diff --git a/iw/language_gui.py b/iw/language_gui.py index bc8ad5bf4..71301a3d5 100644 --- a/iw/language_gui.py +++ b/iw/language_gui.py @@ -33,7 +33,7 @@ class LanguageWindow (InstallWindow): self.lang = self.listStore.get_value(iter, 1) self.instLang.setRuntimeLanguage(self.lang) - self.ics.getICW().setLanguage (self.instLang.getLangNick(self.lang)) + self.ics.getICW().setLanguage (self.instLang.getNickByName(self.lang)) return None @@ -74,10 +74,10 @@ class LanguageWindow (InstallWindow): for locale in instLang.available(): iter = self.listStore.append() + nick = self.instLang.getNickByName(locale) lang = '%s (<span lang="%s">%s</span>)' % ( - _(locale), - "%s" % (instLang.getLangNick(locale).split('.')[0],), - instLang.getNativeLangName(locale)) + _(locale), "%s" % (nick.split('.')[0],), + self.instLang.getNativeLangName(locale)) self.listStore.set_value(iter, 0, lang) self.listStore.set_value(iter, 1, locale) self.listStore.set_value(iter, 2, _(locale)) @@ -89,7 +89,7 @@ class LanguageWindow (InstallWindow): self.listView.append_column(col) self.listView.set_property("headers-visible", False) - current = instLang.getCurrent() + current = instLang.getLangNameByNick(instLang.getCurrent()) iter = self.listStore.get_iter_first() while iter: if self.listStore.get_value(iter, 1) == current: diff --git a/iw/package_gui.py b/iw/package_gui.py index 9c017cfbf..2ff69de11 100644 --- a/iw/package_gui.py +++ b/iw/package_gui.py @@ -558,7 +558,7 @@ class PackageSelectionWindow (InstallWindow): if comp.id != "base": comp.unselect () if comp.id == "everything": - packages.selectLanguageSupportGroups(self.grpset, self.langSupport) + packages.selectLanguageSupportGroups(self.grpset, self.instLanguage) if count: self.setCompCountLabel(comp, count) @@ -593,7 +593,7 @@ class PackageSelectionWindow (InstallWindow): # turn on lang support if we're minimal and enabling if comp.id == "base" and newstate: - packages.selectLanguageSupportGroups(self.grpset, self.langSupport) + packages.selectLanguageSupportGroups(self.grpset, self.instLanguage) self.setComponentsSensitive(comp, not newstate) @@ -915,13 +915,13 @@ class PackageSelectionWindow (InstallWindow): - def getScreen(self, grpset, langSupport, instClass, dispatch): + def getScreen(self, grpset, instLanguage, instClass, dispatch): # PackageSelectionWindow tag="sel-group" ICON_SIZE = 32 self.grpset = grpset - self.langSupport = langSupport + self.instLanguage = instLanguage self.dispatch = dispatch self.origSelection = self.grpset.getSelectionState() diff --git a/lang-table b/lang-table index 97eaa2913..83ada6372 100644 --- a/lang-table +++ b/lang-table @@ -1,47 +1,47 @@ -Afrikaans af latarcyrheb-sun16 af_ZA.UTF-8 us Africa/Johannesburg af_ZA.UTF-8 -Amharic am none am_ET.UTF-8 us Africa/Addis_Ababa am_ZA.UTF-8 -Arabic ar none ar_SA.UTF-8 us Asia/Riyadh ar_SA.UTF-8 -Bengali bn none bn_BD.UTF-8 us Asia/Dhaka bn_BD.UTF-8 -Bengali(India) bn none bn_IN.UTF-8 us Asia/Calcutta bn_IN.UTF-8 -Bulgarian bg latarcyrheb-sun16 bg_BG.UTF-8 bg Europe/Sofia bg_BG.UTF-8 -Catalan ca latarcyrheb-sun16 ca_ES.UTF-8 es Europe/Madrid es_ES.UTF-8 -Chinese(Simplified) zh_CN bterm zh_CN.UTF-8 us Asia/Shanghai zh_CN.UTF-8 -Chinese(Traditional) zh_TW bterm zh_TW.UTF-8 us Asia/Taipei zh_TW.UTF-8 -Croatian hr latarcyrheb-sun16 hr_HR.UTF-8 croat Europe/Zagreb hr_HR.UTF-8 -Czech cs latarcyrheb-sun16 cs_CZ.UTF-8 cz-lat2 Europe/Prague cs_CZ.UTF-8 -Danish da latarcyrheb-sun16 da_DK.UTF-8 dk Europe/Copenhagen da_DK.UTF-8 -Dutch nl latarcyrheb-sun16 nl_NL.UTF-8 nl Europe/Amsterdam nl_NL.UTF-8 -English en latarcyrheb-sun16 en_US.UTF-8 us America/New_York en_US.UTF-8 -Estonian et latarcyrheb-sun16 et_EE.UTF-8 et Europe/Tallinn et_EE.UTF-8 -Finnish fi latarcyrheb-sun16 fi_FI.UTF-8 fi Europe/Helsinki fi_FI.UTF-8 -French fr latarcyrheb-sun16 fr_FR.UTF-8 fr-latin1 Europe/Paris fr_FR.UTF-8 -German de latarcyrheb-sun16 de_DE.UTF-8 de-latin1-nodeadkeys Europe/Berlin de_DE.UTF-8 -Gujarati gu none gu_IN.UTF-8 us Asia/Calcutta gu_IN.UTF-8 -Hindi hi none hi_IN.UTF-8 us Asia/Calcutta hi_IN.UTF-8 -Hungarian hu latarcyrheb-sun16 hu_HU.UTF-8 hu Europe/Budapest hu_HU.UTF-8 -Icelandic is latarcyrheb-sun16 is_IS.UTF-8 is-latin1 Atlantic/Reykjavik is_IS.UTF-8 -Indonesian id latarcryheb-sun16 id_ID.UTF-8 us Asia/Jakarta id_ID.UTF-8 -Italian it latarcyrheb-sun16 it_IT.UTF-8 it Europe/Rome it_IT.UTF-8 -Japanese ja bterm ja_JP.UTF-8 jp106 Asia/Tokyo ja_JP.UTF-8 -Korean ko bterm ko_KR.UTF-8 us Asia/Seoul ko_KR.UTF-8 -Macedonian mk latarcyrheb-sun16 mk_MK.UTF-8 mk Europe/Skopje mk_MK.UTF-8 -Malay ms latarcyrheb-sun16 ms_MY.UTF-8 us Asia/Kuala_Lumpur ms_MY.UTF-8 -Norwegian nb latarcyrheb-sun16 nb_NO.UTF-8 no Europe/Oslo nb_NO.UTF-8 +Afrikaans af latarcyrheb-sun16 af_ZA.UTF-8 us Africa/Johannesburg +Amharic am none am_ET.UTF-8 us Africa/Addis_Ababa +Arabic ar none ar_SA.UTF-8 us Asia/Riyadh +Bengali bn none bn_BD.UTF-8 us Asia/Dhaka +Bengali(India) bn none bn_IN.UTF-8 us Asia/Calcutta +Bulgarian bg latarcyrheb-sun16 bg_BG.UTF-8 bg Europe/Sofia +Catalan ca latarcyrheb-sun16 ca_ES.UTF-8 es Europe/Madrid +Chinese(Simplified) zh_CN bterm zh_CN.UTF-8 us Asia/Shanghai +Chinese(Traditional) zh_TW bterm zh_TW.UTF-8 us Asia/Taipei +Croatian hr latarcyrheb-sun16 hr_HR.UTF-8 croat Europe/Zagreb +Czech cs latarcyrheb-sun16 cs_CZ.UTF-8 cz-lat2 Europe/Prague +Danish da latarcyrheb-sun16 da_DK.UTF-8 dk Europe/Copenhagen +Dutch nl latarcyrheb-sun16 nl_NL.UTF-8 nl Europe/Amsterdam +English en latarcyrheb-sun16 en_US.UTF-8 us America/New_York +Estonian et latarcyrheb-sun16 et_EE.UTF-8 et Europe/Tallinn +Finnish fi latarcyrheb-sun16 fi_FI.UTF-8 fi Europe/Helsinki +French fr latarcyrheb-sun16 fr_FR.UTF-8 fr-latin1 Europe/Paris +German de latarcyrheb-sun16 de_DE.UTF-8 de-latin1-nodeadkeys Europe/Berlin +Gujarati gu none gu_IN.UTF-8 us Asia/Calcutta +Hindi hi none hi_IN.UTF-8 us Asia/Calcutta +Hungarian hu latarcyrheb-sun16 hu_HU.UTF-8 hu Europe/Budapest +Icelandic is latarcyrheb-sun16 is_IS.UTF-8 is-latin1 Atlantic/Reykjavik +Indonesian id latarcryheb-sun16 id_ID.UTF-8 us Asia/Jakarta +Italian it latarcyrheb-sun16 it_IT.UTF-8 it Europe/Rome +Japanese ja bterm ja_JP.UTF-8 jp106 Asia/Tokyo +Korean ko bterm ko_KR.UTF-8 us Asia/Seoul +Macedonian mk latarcyrheb-sun16 mk_MK.UTF-8 mk Europe/Skopje +Malay ms latarcyrheb-sun16 ms_MY.UTF-8 us Asia/Kuala_Lumpur +Norwegian nb latarcyrheb-sun16 nb_NO.UTF-8 no Europe/Oslo Northern Sotho nso latarcyrheb-sun16 nso_ZA.UTF-8 us Africa/Johannesburg -Persian fa none fa_IR.UTF-8 us Asia/Tehran fa_IR.UTF-8 -Polish pl latarcyrheb-sun16 pl_PL.UTF-8 pl Europe/Warsaw pl_PL.UTF-8 -Portuguese pt latarcyrheb-sun16 pt_PT.UTF-8 pt-latin1 Europe/Lisbon pt_PT.UTF-8 -Portuguese(Brazilian) pt_BR latarcyrheb-sun16 pt_BR.UTF-8 br-abnt2 America/Sao_Paulo pt_BR.UTF-8 -Punjabi pa none pa_IN.UTF-8 us Asia/Calcutta pa_IN.UTF-8 -Russian ru latarcyrheb-sun16 ru_RU.UTF-8 ru Europe/Moscow ru_RU.UTF-8 -Slovak sk latarcyrheb-sun16 sk_SK.UTF-8 sk-qerty Europe/Bratislava sk_SK.UTF-8 -Slovenian sl latarcyrheb-sun16 sl_SI.UTF-8 slovene Europe/Ljubljana sl_SI.UTF-8 -Spanish es latarcyrheb-sun16 es_ES.UTF-8 es Europe/Madrid es_ES.UTF-8 -Swedish sv latarcyrheb-sun16 sv_SE.UTF-8 sv-latin1 Europe/Stockholm sv_SE.UTF-8 -Tamil ta none ta_IN.UTF-8 us Asia/Calcutta ta_IN.UTF-8 -Thai th none th_TH.UTF-8 us Asia/Bangkok th_TH.UTF-8 -Turkish tr latarcyrheb-sun16 tr_TR.UTF-8 trq Europe/Istanbul tr_TR.UTF-8 -Ukrainian uk latarcyrheb-sun16 uk_UA.UTF-8 ua-utf Europe/Kiev uk_UA.UTF-8 -Vietnamese vi latarcyrheb-sun16 vi_VN.UTF-8 us Asia/Saigon vi_VN.UTF-8 -Welsh cy latarcyrheb-sun16 cy_GB.UTF-8 uk Europe/London cy_GB.UTF-8 -Zulu zu latarcyrheb-sun16 zu_ZA.UTF-8 us Africa/Johannesburg zu_ZA.UTF-8 +Persian fa none fa_IR.UTF-8 us Asia/Tehran +Polish pl latarcyrheb-sun16 pl_PL.UTF-8 pl Europe/Warsaw +Portuguese pt latarcyrheb-sun16 pt_PT.UTF-8 pt-latin1 Europe/Lisbon +Portuguese(Brazilian) pt_BR latarcyrheb-sun16 pt_BR.UTF-8 br-abnt2 America/Sao_Paulo +Punjabi pa none pa_IN.UTF-8 us Asia/Calcutta +Russian ru latarcyrheb-sun16 ru_RU.UTF-8 ru Europe/Moscow +Slovak sk latarcyrheb-sun16 sk_SK.UTF-8 sk-qerty Europe/Bratislava +Slovenian sl latarcyrheb-sun16 sl_SI.UTF-8 slovene Europe/Ljubljana +Spanish es latarcyrheb-sun16 es_ES.UTF-8 es Europe/Madrid +Swedish sv latarcyrheb-sun16 sv_SE.UTF-8 sv-latin1 Europe/Stockholm +Tamil ta none ta_IN.UTF-8 us Asia/Calcutta +Thai th none th_TH.UTF-8 us Asia/Bangkok +Turkish tr latarcyrheb-sun16 tr_TR.UTF-8 trq Europe/Istanbul +Ukrainian uk latarcyrheb-sun16 uk_UA.UTF-8 ua-utf Europe/Kiev +Vietnamese vi latarcyrheb-sun16 vi_VN.UTF-8 us Asia/Saigon +Welsh cy latarcyrheb-sun16 cy_GB.UTF-8 uk Europe/London +Zulu zu latarcyrheb-sun16 zu_ZA.UTF-8 us Africa/Johannesburg diff --git a/language.py b/language.py index 9f8e844b6..c4bc868e0 100644 --- a/language.py +++ b/language.py @@ -3,7 +3,7 @@ # installer runtime language choice and installed system # language support. # -# Copyright 2001-2003 Red Hat, Inc. +# Copyright 2001-2005 Red Hat, Inc. # # This software may be freely redistributed under the terms of the GNU # library public license. @@ -20,6 +20,7 @@ import rpm from rhpl.translate import cat from rhpl.simpleconfig import SimpleConfigFile +from rhpl.log import log # Converts a single language into a "language search path". For example, # fr_FR.utf8@euro would become "fr_FR.utf8@eueo fr_FR.utf8 fr_FR fr" @@ -38,17 +39,28 @@ def expandLangs(str): return langs +# XXX: The following description is going to be wrong soon. # This is the langauge that's being used at install time (a list of the # choices is in lang-table). class InstallTimeLanguage: - def __init__ (self): + self.info = {} + self.info["SUPPORTED"] = None + self.supported = [] + self.default = None + + self.allSupportedLangs = [] + self.allSupportedNicks = [] + self.langInfoByName = {} + self.nativeLangNames = {} + self.localeInfo = {} + if os.environ.has_key("LANG"): self.current = os.environ["LANG"] else: self.current = "en_US.UTF-8" - self.nativeLangNames = {} + # English name -> native name mapping search = ('lang-names', '/usr/lib/anaconda/lang-names') for path in search: if os.access(path, os.R_OK): @@ -57,8 +69,11 @@ class InstallTimeLanguage: lang, native = line.split(' ', 1) native = native.strip() self.nativeLangNames[lang] = native - break + f.close() + break + + # nick -> (name, short name, font, keyboard, timezone) mapping search = ('lang-table', '/tmp/updates/lang-table', '/mnt/source/RHupdates/lang-table', '/etc/lang-table', '/usr/lib/anaconda/lang-table') @@ -67,203 +82,125 @@ class InstallTimeLanguage: f = open(path, "r") break - lines = f.readlines () - f.close() - self.langNicks = {} - self.font = {} - self.kbd = {} - self.tz = {} - self.langList = [] - self.runtimeLangs = {} - - self.tempDefault = "" - - for line in lines: - string.strip(line) - l = string.split(line) + for line in f.readlines(): + string.strip(line) + l = string.split(line, '\t') # throw out invalid lines - if len(l) < 7: + if len(l) < 6: continue - - longName = l[0] - font = l[2] - shortName = l[3] - keyboard = l[4] - timezone = l[5] - runtime = l[6] - - self.langList.append(longName) - self.langNicks[longName] = shortName - self.font[longName] = font - self.kbd[longName] = keyboard - self.tz[longName] = timezone - self.runtimeLangs[runtime] = shortName - - if self.runtimeLangs.has_key(self.current): - self.current = self.runtimeLangs[self.current] - - self.langList.sort() - self.setRuntimeLanguage(self.getLangNameByNick(self.current)) - - def getFontFile (self, lang): - # Note: in /etc/fonts.cgz fonts are named by the map - # name as that's unique, font names are not - return self.font[lang] - - def getLangNick (self, lang): - # returns the short locale ID - return self.langNicks[lang] - def getNativeLangName(self, lang): - return self.nativeLangNames.get(lang) - - def getLangNameByNick(self, lang): - # The nick we get here may be long (fr_FR@euro), when we need - # shorter (fr_FR), so be a bit fuzzy - for (langName, nick) in self.langNicks.items(): - if (nick == lang) or (nick == lang[0:len(nick)]) or (lang == nick[0:len(lang)]): - return langName - - # FIXME: this could end up infinitely recursing if we screw up the - # lang-table. need to revise the whole thing with post-install - # language not being the same as the installer language - for (nick, main) in self.runtimeLangs.items(): - if (nick == lang) or (nick == lang[0:len(nick)]) or (lang == nick[0:len(lang)]): - return self.getLangNameByNick(main) - -# raise KeyError, "language %s not found" % lang - return self.getLangNameByNick("en_US.UTF-8") - - def getDefaultKeyboard(self): - return self.kbd[self.getCurrent()] + self.localeInfo[l[3]] = (l[0], l[1], l[2], l[4], l[5]) - def getDefaultTimeZone(self): - return self.tz[self.getCurrent()] + f.close() - def available (self): - return self.langList + # long name -> (nick, map, font) mapping + search = ('locale-list', '/usr/share/anaconda/locale-list') + for path in search: + if os.access(path, os.R_OK): + f = open(path, 'r') - def getCurrentLangSearchList(self): - return expandLangs(self.langNicks[self.getCurrent()]) + ['C'] + for line in f.readlines(): + line = string.strip(line) + (nick, map, font, name) = string.split(line, ' ', 3) + self.langInfoByName[name] = (nick, map, font) - def getCurrent(self): - return self.getLangNameByNick(self.current) + f.close() + break - def setRuntimeDefaults(self, name): - lang = self.langNicks[name] - self.current = lang - # XXX HACK HACK, I'm using an environment variable to communicate - # between two classes (runtimelang and lang support) - os.environ["RUNTIMELANG"] = lang + # If we weren't able to find a locale-list, set a reasonable default. + if not self.allSupportedLangs: + self.langInfoByName['English (USA)'] = ('en_US.UTF-8', 'iso01', 'default8x16') - def setRuntimeLanguage(self, name): - self.setRuntimeDefaults(name) - lang = self.langNicks[name] + self.allSupportedLangs = self.langInfoByName.keys() - for (runtime, main) in self.runtimeLangs.items(): - if main == lang: - lang = runtime + # Set the language for anaconda to be using based on current $LANG. + self.setRuntimeLanguage(self.current) - os.environ["LANG"] = lang - os.environ["LC_NUMERIC"] = 'C' + # Convert what might be a shortened form of a language's nick (en or + # en_US, for example) into the full version (en_US.UTF-8). + def canonLangNick (self, nick): try: - locale.setlocale(locale.LC_ALL, "") - except locale.Error: - pass - - newlangs = [lang] - if lang.find(".") != -1: - newlangs.append(lang[:lang.find(".")]) - if len(lang) > 2: - newlangs.append(lang[:2]) - cat.setlangs(newlangs) - - def writeKS(self, f): - lang = self.getLangNick(self.getCurrent()) - f.write("lang %s\n" % lang); - -# The languages which should be supported on the installed system, including -# which language to set as the default. -class Language (SimpleConfigFile): + for key in self.localeInfo.keys(): + if nick in expandLangs(key): + return key + except: + return 'en_US.UTF-8' + + def getNickByName (self, name): + for k in self.localeInfo.keys(): + row = self.localeInfo[k] + if row[0] == name: + return k + + def getNativeLangName(self, lang): + return self.nativeLangNames[lang] - def __init__ (self): - self.info = {} - self.info["SUPPORTED"] = None - self.supported = [] - self.default = None + def getLangNameByNick(self, nick): + try: + return self.localeInfo[nick][0] + except KeyError: + nick = self.canonLangNick (self.getCurrent()) + return self.localeInfo[nick][0] - self.allSupportedLangs = [] - self.langInfoByName = {} + def getFontFile (self, lang): + # Note: in /etc/fonts.cgz fonts are named by the map + # name as that's unique, font names are not + lang = self.canonLangNick (lang) + return self.localeInfo[lang][2] - allSupportedLangs = [] - langInfoByName = {} - langFilter = {} - allInstalledFlag = 0 - - langsInstalled = [] - if os.access("/usr/share/anaconda/locale-list", os.R_OK): - f = open("/usr/share/anaconda/locale-list") - lines = f.readlines() - f.close() - for line in lines: - line = string.strip(line) - (lang, map, font, name) = string.split(line, ' ', 3) - langInfoByName[name] = (lang, map, font) - allSupportedLangs.append(name) - - if allInstalledFlag or (langFilter and langFilter.has_key(lang)): - langsInstalled.append(name) - else: - langInfoByName['English (USA)'] = ('en_US.UTF-8', 'iso01', 'default8x16') - allSupportedLangs.append('English (USA)') - langsInstalled.append('English (USA)') + def getDefaultKeyboard(self): + lang = self.canonLangNick (self.getCurrent()) + return self.localeInfo[lang][3] - self.langInfoByName = langInfoByName - self.allSupportedLangs = allSupportedLangs + def getDefaultTimeZone(self): + lang = self.canonLangNick (self.getCurrent()) + return self.localeInfo[lang][4] - def getAllSupported(self): - return self.allSupportedLangs + def available (self): + return self.nativeLangNames.keys() - def getLangNameByNick(self, nick): - for langName in self.langInfoByName.keys(): - (lang, map, font) = self.langInfoByName[langName] - if (nick == lang) or (nick == lang[0:len(nick)]) or (lang == nick[0:len(lang)]): - return langName + def getSupported (self): + return self.supported -# raise KeyError, "language %s not found" % nick - return self.getLangNameByNick("en_US.UTF-8") + def getAllSupported (self): + return self.allSupportedLangs - def getLangNickByName(self, name): - (lang, map, font) = self.langInfoByName[name] - return lang + def getCurrentLangSearchList(self): + return expandLangs(self.getCurrent()) + ['C'] - def getSupported (self): - return self.supported + def getCurrent(self): + return self.current + + def getDefault(self): + if self.default: + return self.default + elif os.environ.has_key('RUNTIMELANG'): + lang = os.environ['RUNTIMELANG'] + name = self.getLangNameByNick(lang) + if name not in self.getSupported(): + # the default language needs to be in the supported list! + s = self.getSupported() + s.append(name) + s.sort() + self.setSupported(s) + + return name + else: + return 'English (USA)' - def getDefault (self): - if self.default: - return self.default - # XXX (see above comment) - elif os.environ.has_key('RUNTIMELANG'): - lang = os.environ['RUNTIMELANG'] - name = self.getLangNameByNick(lang) - if name not in self.getSupported(): - # the default language needs to be in the supported list! - s = self.getSupported() - s.append(name) - s.sort() - self.setSupported(s) - - return name - else: - return 'English (USA)' - - def setDefault(self, name): - if not name: + def setDefault(self, nick): + log ("starting setDefault") + if not nick: self.default = None return + # Try to find a match for the language nick we were given. + for k in self.langInfoByName.keys(): + row = self.langInfoByName[k] + if row[0] == nick: + name = k + self.default = name (lang, map, font) = self.langInfoByName[name] @@ -276,42 +213,69 @@ class Language (SimpleConfigFile): self.info['LANGUAGE'] = "zh_CN.GB18030:zh_CN.GB2312:zh_CN" def setSupported (self, langlist): + log ("starting setSupported") if len(langlist) == len(self.allSupportedLangs): + allSupportedNicks = map (lambda name: self.langInfoByName[name][0], self.allSupportedLangs) self.info["SUPPORTED"] = None - self.supported = langlist -# rpm.delMacro ("_install_langs") + self.supported = allSupportedNicks elif langlist: rpmNickList = [] for name in langlist: - (lang, map, font) = self.langInfoByName[name] - rpmNickList = rpmNickList + expandLangs(lang) + nick = self.getNickByName(name) + rpmNickList = rpmNickList + expandLangs(nick) linguas = string.join (rpmNickList, ':') self.info["SUPPORTED"] = linguas self.supported = langlist shortLinguas = string.join (rpmNickList, ':') -# rpm.addMacro("_install_langs", shortLinguas) else: self.info["SUPPORTED"] = None -# rpm.delMacro ("_install_langs") self.supported = None if self.info["SUPPORTED"]: os.environ ["LINGUAS"] = self.info["SUPPORTED"] else: os.environ ["LINGUAS"] = "" - + + def setRuntimeDefaults(self, nick): + self.current = nick + # XXX HACK HACK, I'm using an environment variable to communicate + # between two classes (runtimelang and lang support) + os.environ["RUNTIMELANG"] = nick + + def setRuntimeLanguage(self, nick): + self.setRuntimeDefaults(nick) + lang = nick + + os.environ["LANG"] = lang + os.environ["LC_NUMERIC"] = 'C' + try: + locale.setlocale(locale.LC_ALL, "") + except locale.Error: + pass + + newlangs = [lang] + if lang.find(".") != -1: + newlangs.append(lang[:lang.find(".")]) + if len(lang) > 2: + newlangs.append(lang[:2]) + cat.setlangs(newlangs) + def write(self, instPath): f = open(instPath + "/etc/sysconfig/i18n", "w") - f.write(str (self)) + for key in self.info.keys(): + if self.info[key] != None: + f.write("%s=\"%s\"\n" % (key, self.info[key])) f.close() def writeKS(self, f): - sup = "" + sup = "" + if self.info["SUPPORTED"] != None: for n in self.getSupported(): - sup = sup + " " + self.getLangNickByName(n) - - f.write("langsupport --default=%s%s\n" % - (self.getLangNickByName(self.getDefault()), sup)) + sup = sup + " " + self.getNickByName(n) + + f.write("lang %s\n" % self.getCurrent()) + f.write("langsupport --default=%s%s\n" % + (self.getNickByName(self.getDefault()), sup)) diff --git a/packages.py b/packages.py index c5e3da474..6e0abe9a4 100644 --- a/packages.py +++ b/packages.py @@ -1573,19 +1573,19 @@ def betaNagScreen(intf, dir): break # FIXME: this is a kind of poor way to do this, but it will work for now -def selectLanguageSupportGroups(grpset, langSupport): +def selectLanguageSupportGroups(grpset, instLanguage): if not grpset.groups.has_key("language-support"): return - langSupport.getDefault() - sup = langSupport.supported + instLanguage.getDefault() + sup = instLanguage.supported if len(sup) == 0: - sup = langSupport.getAllSupported() + sup = instLanguage.getAllSupported() langs = [] for name in sup: try: - lang = langSupport.langInfoByName[name][0] + lang = instLanguage.langInfoByName[name][0] langs.extend(language.expandLangs(lang)) except: continue @@ -150,7 +150,7 @@ class ProgressWindow: class InstallInterface: def helpWindow(self, screen, key): lang = self.instLanguage.getCurrent() - lang = self.instLanguage.getLangNick(lang) + lang = self.instLanguage.getNickByName(lang) self.langSearchPath = expandLangs(lang) + ['C'] if key == "helponhelp": @@ -433,7 +433,7 @@ class InstallInterface: #(self.screen.width - len(_(self.welcomeText))) * " ") #self.screen.drawRootText (0 - len(_(step[0])), 0, _(step[0])) langname = id.instLanguage.getCurrent() - lang = id.instLanguage.getLangNick(langname) + lang = id.instLanguage.getNickByName(langname) self.langSearchPath = expandLangs(lang) + ['C'] self.instLanguage = id.instLanguage diff --git a/textw/packages_text.py b/textw/packages_text.py index 4dcbbacc0..8f6bceefb 100644 --- a/textw/packages_text.py +++ b/textw/packages_text.py @@ -41,7 +41,7 @@ class PackageGroupWindow: label.setText(self.size(comps)) - def __call__(self, screen, grpset, langSupport, instClass, dispatch): + def __call__(self, screen, grpset, instLanguage, instClass, dispatch): origSelection = grpset.getSelectionState() ct = CheckboxTree(height = 8, scroll = 1) |