summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Lumens <clumens@redhat.com>2005-03-23 21:14:20 +0000
committerChris Lumens <clumens@redhat.com>2005-03-23 21:14:20 +0000
commit68e971a9d0f3ac7e299aefe686c6e1ad8f25f96b (patch)
tree4987450ced01aa3227df29c6787225681ca6df1e
parent9e822d2730b96fb9a418070dce1138cc5fbafecd (diff)
downloadanaconda-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--ChangeLog11
-rw-r--r--dispatch.py8
-rw-r--r--exception.py14
-rwxr-xr-xgui.py5
-rw-r--r--installclass.py15
-rw-r--r--instdata.py4
-rw-r--r--iw/language_gui.py10
-rw-r--r--iw/package_gui.py8
-rw-r--r--lang-table92
-rw-r--r--language.py340
-rw-r--r--packages.py10
-rw-r--r--text.py4
-rw-r--r--textw/packages_text.py2
13 files changed, 248 insertions, 275 deletions
diff --git a/ChangeLog b/ChangeLog
index 1ac3efe66..df1e64877 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
diff --git a/gui.py b/gui.py
index bfab6a0ec..5aa1eb836 100755
--- a/gui.py
+++ b/gui.py
@@ -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
diff --git a/text.py b/text.py
index a32bc0cf9..31d418d7f 100644
--- a/text.py
+++ b/text.py
@@ -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)