summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog15
-rwxr-xr-xanaconda3
-rwxr-xr-xgui.py18
-rw-r--r--installclass.py11
-rw-r--r--language.py107
-rw-r--r--loader2/loader.c3
-rw-r--r--text.py15
7 files changed, 79 insertions, 93 deletions
diff --git a/ChangeLog b/ChangeLog
index 8ec71206e..8f2625d6a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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,
diff --git a/anaconda b/anaconda
index b54c651fc..39743e9e6 100755
--- a/anaconda
+++ b/anaconda
@@ -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)
diff --git a/gui.py b/gui.py
index bf4d0d91c..5494682be 100755
--- a/gui.py
+++ b/gui.py
@@ -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");
diff --git a/text.py b/text.py
index 4cdf2060c..3ecfb7153 100644
--- a/text.py
+++ b/text.py
@@ -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