summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xfonts/updfonts2
-rw-r--r--lang-table2
-rw-r--r--lang-table-kon2
-rw-r--r--language.py22
-rw-r--r--loader/lang.c50
-rw-r--r--packages.py1
-rw-r--r--text.py8
-rw-r--r--textw/language_text.py17
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
diff --git a/text.py b/text.py
index 350aac492..be666c67a 100644
--- a/text.py
+++ b/text.py
@@ -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")