diff options
author | Matt Wilson <msw@redhat.com> | 2001-08-09 18:16:19 +0000 |
---|---|---|
committer | Matt Wilson <msw@redhat.com> | 2001-08-09 18:16:19 +0000 |
commit | 470aa28013177b9b8fb6a10fed41c62617afa558 (patch) | |
tree | b3ba55f65483d40298ce8deb9ff2d233310ff89a | |
parent | ffeef984d5b5c53cc81341780e4c50b0660fd28d (diff) | |
download | anaconda-470aa28013177b9b8fb6a10fed41c62617afa558.tar.gz anaconda-470aa28013177b9b8fb6a10fed41c62617afa558.tar.xz anaconda-470aa28013177b9b8fb6a10fed41c62617afa558.zip |
support deferring language load until second stage. This allows a user to set up Korean NFS and get Korean GUI (#50364)
-rwxr-xr-x | fonts/updfonts | 2 | ||||
-rw-r--r-- | lang-table | 2 | ||||
-rw-r--r-- | lang-table-kon | 2 | ||||
-rw-r--r-- | language.py | 22 | ||||
-rw-r--r-- | loader/lang.c | 50 | ||||
-rw-r--r-- | packages.py | 1 | ||||
-rw-r--r-- | text.py | 8 | ||||
-rw-r--r-- | textw/language_text.py | 17 |
8 files changed, 66 insertions, 38 deletions
diff --git a/fonts/updfonts b/fonts/updfonts index e7b597103..254b982c5 100755 --- a/fonts/updfonts +++ b/fonts/updfonts @@ -8,7 +8,7 @@ if [ -z "$ARCH" ]; then exit 1 fi -fontlist=`awk '{ print $4 }' < $LANGTABLE | grep -v "None" | sort -u` +fontlist=`awk '{ print $4 }' < $LANGTABLE | egrep -v "(None|Kon)" | sort -u` echo $fontlist diff --git a/lang-table b/lang-table index 66295835a..5b1f9082f 100644 --- a/lang-table +++ b/lang-table @@ -8,7 +8,7 @@ German de lat0-16 iso09 de_DE de-latin1-nodead Hungarian hu lat2-sun16 iso02 hu_HU hu Europe/Budapest Icelandic is lat0-sun16 iso15 is_IS is-latin1 Atlantic/Reykjavik Italian it lat0-sun16 iso15 it_IT it Europe/Rome -Japanese ja None None ja_JP.eucJP jp106 Asia/Tokyo +Japanese ja Kon None ja_JP.eucJP jp106 Asia/Tokyo Korean ko None None ko_KR.eucKR us Asia/Seoul Norwegian no lat0-sun16 iso15 no_NO no-latin1 Europe/Oslo Portuguese pt_BR lat0-sun16 iso15 pt_PT pt-latin1 Europe/Lisbon diff --git a/lang-table-kon b/lang-table-kon index 327f45b63..3af45af82 100644 --- a/lang-table-kon +++ b/lang-table-kon @@ -1,2 +1,2 @@ English en default8x16 iso01 en_US us America/New_York -Japanese ja None None ja_JP.eucJP jp106 Asia/Tokyo +Japanese ja Kon None ja_JP.eucJP jp106 Asia/Tokyo diff --git a/language.py b/language.py index 06b055d5e..4d712456c 100644 --- a/language.py +++ b/language.py @@ -26,6 +26,7 @@ def expandLangs(str): class InstallTimeLanguage: def __init__ (self): + self.current = "en_US" if os.access("lang-table", os.R_OK): f = open("lang-table", "r") elif os.access("/etc/lang-table", os.R_OK): @@ -98,14 +99,18 @@ class InstallTimeLanguage: return expandLangs(self.langNicks[self.getCurrent()]) + ['C'] def getCurrent(self): - if os.environ.has_key('LANG'): - what = os.environ['LANG'] - else: - what = 'en_US' - return self.getLangNameByNick(what) + return self.getLangNameByNick(self.current) - def setRuntimeLanguage(self, name): + 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 + + def setRuntimeLanguage(self, name): + self.setRuntimeDefaults(name) + lang = self.langNicks[name] os.environ["LC_ALL"] = lang os.environ["LANG"] = lang @@ -205,8 +210,9 @@ class Language (SimpleConfigFile): def getDefault (self): if self.default: return self.default - elif os.environ.has_key('LANG'): - lang = os.environ['LANG'] + # 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! diff --git a/loader/lang.c b/loader/lang.c index d5e064eb4..2c4dc8b29 100644 --- a/loader/lang.c +++ b/loader/lang.c @@ -111,11 +111,6 @@ static void loadLanguageList(int flags) { code, keyboard, timezone) != 7) { logMessage("bad line %d in lang-table", lineNum); } else { - /* XXX assume that if we don't have a console font for this - language that it needs to have kon or some other text display - engine */ - if (!haveKon && !strcmp (font, "None") && !strcmp (map, "None")) - continue; languages[numLanguages].lang = strdup(name); languages[numLanguages].key = strdup(key); languages[numLanguages].font = strdup(font); @@ -152,8 +147,8 @@ void loadLanguage (char * file, int flags) { stream = gzopen(file, "r"); if (!stream) { - newtWinMessage("Error", "Ok", "Cannot open %s: %s. Installation will " - "proceed in English.", file, strerror(errno)); + newtWinMessage("Error", "Ok", "Translation for %s is not available. " + "The Installation will proceed in English.", key); return ; } @@ -257,6 +252,10 @@ void setLanguage (char * key, int flags) { for (i = 0; i < numLanguages; i++) { if (!strcmp(languages[i].key, key)) { + if (!strcmp(languages[i].font, "Kon") && !haveKon) + break; + if (!strcmp(languages[i].font, "None")) + break; setenv("LANG", languages[i].lc_all, 1); setenv("LANGKEY", languages[i].key, 1); setenv("LC_ALL", languages[i].lc_all, 1); @@ -318,23 +317,26 @@ int chooseLanguage(char ** lang, int flags) { return 0; } - setenv("LANG", languages[choice].lc_all, 1); - setenv("LANGKEY", languages[choice].key, 1); - setenv("LC_ALL", languages[choice].lc_all, 1); - setenv("LINGUAS", languages[choice].lc_all, 1); - + /* only set the environment variables when we actually have a way + to display the language */ + if ((!strcmp (languages[choice].font, "Kon") && haveKon) || + (strcmp (languages[choice].font, "None"))) { + setenv("LANG", languages[choice].lc_all, 1); + setenv("LANGKEY", languages[choice].key, 1); + setenv("LC_ALL", languages[choice].lc_all, 1); + setenv("LINGUAS", languages[choice].lc_all, 1); + } + if (strings) { free(strings), strings = NULL; numStrings = allocedStrings = 0; } - if (haveKon) - { + if (haveKon) { extern int continuing; extern void stopNewt(void); - - /* XXX need to do something for Korean, Chinese */ - if (!strcmp (languages[choice].font, "None") && !continuing) { + + if (!strcmp (languages[choice].font, "Kon") && !continuing) { char * args[4]; stopNewt(); @@ -347,8 +349,18 @@ int chooseLanguage(char ** lang, int flags) { execv(FL_TESTING(flags) ? "./loader" : "/sbin/loader", args); } } - - loadLanguage (NULL, flags); + + /* load the language only if it is displayable */ + if ((!strcmp (languages[choice].font, "Kon") && haveKon) || + (strcmp (languages[choice].font, "None"))) { + loadLanguage (NULL, flags); + } else { + newtWinMessage("Language Unavailable", "Ok", + "%s display is unavailable in text mode. The " + "installation will continue in English until the " + "display of %s is possible", languages[choice].lang, + languages[choice].lang); + } if (languages[choice].map) loadFont(languages[choice].map, flags); diff --git a/packages.py b/packages.py index c0703fd5f..bb740fa19 100644 --- a/packages.py +++ b/packages.py @@ -193,7 +193,6 @@ def checkDependencies(dir, intf, disp, id, instPath): #else: class InstallCallback: - def cb(self, what, amount, total, h, (param)): if (what == rpm.RPMCALLBACK_TRANS_START): # step 6 is the bulk of the transaction set @@ -338,8 +338,14 @@ 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() + # if we don't have any way to display the preselected language, + # fall back to English. + if ((id.instLanguage.getFontFile(lang) == "Kon" and not + isys.isPsudoTTY(0)) or + id.instLanguage.getFontFile(lang) == "None"): + lang = "English" + id.instLanguage.setRuntimeLanguage(lang) lang = id.instLanguage.getLangNick(lang) self.langSearchPath = expandLangs(lang) + ['C'] diff --git a/textw/language_text.py b/textw/language_text.py index f02a8b555..841a748a7 100644 --- a/textw/language_text.py +++ b/textw/language_text.py @@ -25,11 +25,6 @@ class LanguageWindow: languages = instLanguage.available () haveKon = os.access ("/sbin/continue", os.X_OK) - if not haveKon: - # the slice gives us another working copy of the list - for lang in languages[:]: - if instLanguage.getFontFile(lang) == "None": - languages.remove(lang) current = instLanguage.getCurrent() @@ -51,8 +46,18 @@ class LanguageWindow: choice = languages[choice] + if ((not haveKon and instLanguage.getFontFile(choice) == "Kon") or + instLanguage.getFontFile(choice) == "None"): + ButtonChoiceWindow(screen, "Language Unavailable", + "%s display is unavailable in text mode. The " + "installation will continue in English." % (choice,), + buttons=[TEXT_OK_BUTTON]) + instLanguage.setRuntimeDefaults(choice) + return INSTALL_OK + if (flags.setupFilesystems and - choice == "Japanese" and not isys.isPsudoTTY(0)): + instLanguage.getFontFile(choice) == "Kon" + and not isys.isPsudoTTY(0)): # we're not running KON yet, lets fire it up os.environ["ANACONDAARGS"] = (os.environ["ANACONDAARGS"] + " --lang ja_JP.eucJP") |