diff options
-rw-r--r-- | ChangeLog | 15 | ||||
-rwxr-xr-x | anaconda | 3 | ||||
-rwxr-xr-x | gui.py | 18 | ||||
-rw-r--r-- | installclass.py | 11 | ||||
-rw-r--r-- | language.py | 107 | ||||
-rw-r--r-- | loader2/loader.c | 3 | ||||
-rw-r--r-- | text.py | 15 |
7 files changed, 79 insertions, 93 deletions
@@ -1,3 +1,18 @@ +2005-04-13 Chris Lumenss <clumens@redhat.com> + + * anaconda: Always set a default language. + * gui.py (InstallInterface.run): Set supported languages. Use + Language's search path instead of making our own. + * installclass.py (BaseInstallClass.setLanguageSupport): Use + language nicknames instead of regular names. + * language.py: Use language nicknames throughout. Have canonLangNick + return en_US.UTF-8 if the nickname isn't found. Set up the runtime + language properly even if the installtime langauge is not supported by + anaconda (#152404). + * loader2/loader.c (main): Set LC_COLLATE=C. + * text.py: Use Language's search patch instead of making our own. + Use language nicknames throughout. Set supported languages. + 2005-04-13 Peter Jones <pjones@redhat.com> * scripts/upd-instroot: add libaudit to the graphical environment, @@ -1122,7 +1122,8 @@ dispatch = dispatch.Dispatcher(intf, id, methodobj, rootPath) if lang: dispatch.skipStep("language", permanent = 1) instClass.setLanguage(id, lang) - + instClass.setLanguageDefault(id, lang) + if keymap: dispatch.skipStep("keyboard", permanent = 1) instClass.setKeyboard(id, keymap) @@ -761,12 +761,10 @@ class InstallInterface: id.fsset.registerMessageWindow(self.messageWindow) id.fsset.registerProgressWindow(self.progressWindow) id.fsset.registerWaitWindow(self.waitWindow) + id.instLanguage.setSupported([id.instLanguage.getDefault()]) parted.exception_set_handler(partedExceptionWindow) - lang = id.instLanguage.getCurrent() - id.instLanguage.setRuntimeLanguage (lang) - id.instLanguage.setDefault (lang) - self.icw = InstallControlWindow (self, self.dispatch, lang) + self.icw = InstallControlWindow (self, self.dispatch, id) self.icw.run (self.runres) class TextViewBrowser(gtk.TextView): @@ -812,9 +810,7 @@ class TextViewBrowser(gtk.TextView): class InstallControlWindow: - def setLanguage (self, locale): - self.langSearchPath = expandLangs(locale) + ['C'] - + def setLanguage (self): if not self.__dict__.has_key('window'): return self.reloadRcQueued = 1 @@ -873,7 +869,7 @@ class InstallControlWindow: self.setScreen () def loadReleaseNotes(self): - langList = self.langSearchPath + [ "" ] + langList = self.id.instLanguage.getCurrentLangSearchList() + [ "" ] suffixList = [] for lang in langList: if lang: @@ -1122,7 +1118,7 @@ class InstallControlWindow: self.mainxml.get_widget("mainTable").set_homogeneous(False) buffer = htmlbuffer.HTMLBuffer() - buffer.feed(ics.getHTML(self.langSearchPath)) + buffer.feed(ics.getHTML(self.id.instLanguage.getCurrentLangSearchList())) textbuffer = buffer.get_buffer() self.help.set_buffer(textbuffer) # scroll to the top. Do this with a mark so it's done in the idle loop @@ -1231,11 +1227,11 @@ class InstallControlWindow: if ics.getGrabNext(): self.mainxml.get_widget("nextButton").grab_focus() - def __init__ (self, ii, dispatch, locale): + def __init__ (self, ii, dispatch, id): self.reloadRcQueued = 0 self.ii = ii + self.id = id self.dispatch = dispatch - self.setLanguage(locale) self.handle = None self.displayHelp = True diff --git a/installclass.py b/installclass.py index 379c84eb9..882191ce0 100644 --- a/installclass.py +++ b/installclass.py @@ -345,15 +345,14 @@ class BaseInstallClass: if wepkey: dev.set(("wepkey", wepkey)) - def setLanguageSupport(self, id, langlist): - if len (langlist) == 0: + def setLanguageSupport(self, id, nickList): + if len (nickList) == 0: id.instLanguage.setSupported(id.instLanguage.getAllSupported()) else: newlist = [] - for lang in langlist: - name = id.instLanguage.getLangNameByNick (lang) - if name not in newlist: - newlist.append(name) + for nick in nickList: + if nick not in newlist: + newlist.append(nick) default = id.instLanguage.getDefault() if default not in newlist: diff --git a/language.py b/language.py index 31a737258..b2ca0547a 100644 --- a/language.py +++ b/language.py @@ -116,17 +116,16 @@ class Language: # Set the language for anaconda to be using based on current $LANG. self.setRuntimeLanguage(self.current) self.setDefault(self.current) - self.setSupported([self.getLangNameByNick(self.current)]) + self.setSupported([self.current]) # 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). + # en_US, for example) into the full version (en_US.UTF-8). If we + # don't find it, return our default of en_US.UTF-8. def canonLangNick (self, nick): - try: - for key in self.localeInfo.keys(): - if nick in expandLangs(key): - return key - except: - return 'en_US.UTF-8' + for key in self.localeInfo.keys(): + if nick in expandLangs(key): + return key + return 'en_US.UTF-8' def getNickByName (self, name): @@ -139,27 +138,18 @@ class Language: return self.nativeLangNames[lang] def getLangNameByNick(self, nick): - canonNick = self.canonLangNick (nick) + return self.localeInfo[self.canonLangNick(nick)][0] - try: - return self.localeInfo[canonNick][0] - except KeyError: - curNick = self.canonLangNick (self.getCurrent()) - return self.localeInfo[curNick][0] - - def getFontFile (self, lang): + def getFontFile (self, nick): # 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] + return self.localeInfo[self.canonLangNick(nick)][2] def getDefaultKeyboard(self): - lang = self.canonLangNick (self.getCurrent()) - return self.localeInfo[lang][3] + return self.localeInfo[self.canonLangNick(self.getCurrent())][3] def getDefaultTimeZone(self): - lang = self.canonLangNick (self.getCurrent()) - return self.localeInfo[lang][4] + return self.localeInfo[self.canonLangNick(self.getCurrent())][4] def available (self): return self.nativeLangNames.keys() @@ -179,83 +169,71 @@ class Language: 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(): + elif self.current: + nick = self.getNickByName (self.current) + if nick not in self.getSupported(): # the default language needs to be in the supported list! s = self.getSupported() - s.append(name) + s.append(nick) s.sort() self.setSupported(s) - return name + return nick else: - return 'English' + return 'en_US.UTF-8' def setDefault(self, nick): - canonNick = self.canonLangNick(nick) - - if not canonNick or not self.localeInfo[canonNick]: - self.default = None - return - - self.default = self.getLangNameByNick(canonNick) - - self.info['LANG'] = canonNick - self.info['SYSFONT'] = self.localeInfo[canonNick][2] + self.default = nick + self.info['LANG'] = nick + self.info['SYSFONT'] = self.localeInfo[self.canonLangNick(nick)][2] # XXX hack - because of exceptional cases on the var - zh_CN.GB2312 if nick == "zh_CN.GB18030": self.info['LANGUAGE'] = "zh_CN.GB18030:zh_CN.GB2312:zh_CN" - def setSupported (self, namelist): - if len(namelist) == len(self.allSupportedLangs): + def setSupported (self, nickList): + if len(nickList) == len(self.allSupportedLangs): self.info["SUPPORTED"] = None self.supported = self.getAllSupported() - elif namelist: + elif nickList: rpmNickList = [] - for name in namelist: - nick = self.getNickByName(name) - rpmNickList = rpmNickList + expandLangs(nick) + + for nick in nickList: + for sub in expandLangs(nick): + if not sub in rpmNickList: + rpmNickList.append(sub) linguas = string.join (rpmNickList, ':') self.info["SUPPORTED"] = linguas - self.supported = namelist + self.supported = rpmNickList shortLinguas = string.join (rpmNickList, ':') else: self.info["SUPPORTED"] = None - self.supported = None + self.supported = None if self.info["SUPPORTED"]: - os.environ ["LINGUAS"] = self.info["SUPPORTED"] + os.environ ["LINGUAS"] = self.info["SUPPORTED"] else: - os.environ ["LINGUAS"] = "" + 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 + canonNick = self.canonLangNick(nick) + self.current = canonNick def setRuntimeLanguage(self, nick): + canonNick = self.canonLangNick(nick) self.setRuntimeDefaults(nick) - lang = nick - os.environ["LANG"] = lang + os.environ["LANG"] = canonNick 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) + cat.setlangs(expandLangs(os.environ["LANG"])) def write(self, instPath): f = open(instPath + "/etc/sysconfig/i18n", "w") @@ -269,8 +247,7 @@ class Language: if self.info["SUPPORTED"] != None: for n in self.getSupported(): - sup = sup + " " + self.getNickByName(n) + sup = sup + " " + n - f.write("lang %s\n" % self.getCurrent()) - f.write("langsupport --default=%s%s\n" % - (self.getNickByName(self.getDefault()), sup)) + f.write("lang %s\n" % self.info['LANG']) + f.write("langsupport --default=%s%s\n" % (self.getDefault(), sup)) diff --git a/loader2/loader.c b/loader2/loader.c index 7a642934b..2212608d2 100644 --- a/loader2/loader.c +++ b/loader2/loader.c @@ -1147,6 +1147,9 @@ int main(int argc, char ** argv) { { 0, 0, 0, 0, 0 } }; + /* Make sure sort order is right. */ + setenv ("LC_COLLATE", "C", 1); + /* JKFIXME: very very bad hack */ secondStageModuleLocation = malloc(sizeof(struct moduleBallLocation)); secondStageModuleLocation->path = strdup("/mnt/runtime/modules/modules.cgz"); @@ -143,10 +143,6 @@ class ProgressWindow: class InstallInterface: def helpWindow(self, screen, key): - lang = self.instLanguage.getCurrent() - lang = self.instLanguage.getNickByName(lang) - self.langSearchPath = expandLangs(lang) + ['C'] - if key == "helponhelp": if self.showingHelpOnHelp: return None @@ -167,7 +163,7 @@ class InstallInterface: "/usr/share/anaconda/"): if found: break - for lang in self.langSearchPath: + for lang in self.instLanguage.getCurrentLangSearchList(): for tag in tags: fn = "%shelp/%s/s1-help-screens-%s%s.txt" \ % (path, lang, key, tag) @@ -393,12 +389,13 @@ class InstallInterface: log("unable to start bterm, falling back to english") oldlang = id.instLanguage.getCurrent() log("old language was %s" %(oldlang,)) - id.instLanguage.setRuntimeLanguage("English") + id.instLanguage.setRuntimeLanguage("en_US.UTF-8") id.instLanguage.setRuntimeDefaults(oldlang) if id.instLanguage.getFontFile(id.instLanguage.getCurrent()) == "none": + log("run: setting default runtime language") oldlang = id.instLanguage.getCurrent() - id.instLanguage.setRuntimeLanguage("English") + id.instLanguage.setRuntimeLanguage("en_US.UTF-8") id.instLanguage.setRuntimeDefaults(oldlang) self.screen = SnackScreen() @@ -420,9 +417,6 @@ class InstallInterface: #self.screen.drawRootText (len(_(self.welcomeText)), 0, #(self.screen.width - len(_(self.welcomeText))) * " ") #self.screen.drawRootText (0 - len(_(step[0])), 0, _(step[0])) - lang = id.instLanguage.getCurrent() - - self.langSearchPath = expandLangs(lang) + ['C'] self.instLanguage = id.instLanguage # draw the frame after setting up the fallback @@ -442,6 +436,7 @@ class InstallInterface: id.fsset.registerMessageWindow(self.messageWindow) id.fsset.registerProgressWindow(self.progressWindow) id.fsset.registerWaitWindow(self.waitWindow) + id.instLanguage.setSupported([id.instLanguage.getDefault()]) parted.exception_set_handler(self.partedExceptionWindow) lastrc = INSTALL_OK |