Index: t3lib/class.t3lib_befunc.php
===================================================================
--- t3lib/class.t3lib_befunc.php (Revision 105)
+++ t3lib/class.t3lib_befunc.php (Revision 110)
@@ -807,6 +807,59 @@
return $sysLanguages;
}
+
+ /**
+ *
+ * Note: doesn't respect the q=-rating by now. Should perhaps be implemented
+ *
+ * @param boolean Include lang-variants as en-us or de-de?
+ * @return array All languages accepted by the user's browser, in order in which they appear in _SERVER[HTTP_ACCEPT_LANGUAGES]
+ */
+ function getBrowserAcceptLanguages($includeSubLanguages = false) {
+ $langs_tmp = t3lib_div::getIndpEnv('HTTP_ACCEPT_LANGUAGE');
+ $tmp_arr = t3lib_div::trimExplode(',', $langs_tmp, true);
+
+ $langs = array();
+ foreach ($tmp_arr as $langstring) {
+ if (strpos($langstring, ';') > 0) {
+ $lang = substr($langstring, 0, strpos($langstring, ';'));
+ } else {
+ $lang = $langstring;
+ }
+
+ if (strlen($lang) > 0) {
+ if (!$includeSubLanguages && substr_count($lang, '-') > 0) {
+ $lang = substr($lang, 0, 2);
+ }
+ if (!in_array($lang, $langs)) {
+ $langs[] = $lang;
+ }
+ }
+ }
+
+ return $langs;
+ }
+
+ /**
+ * Returns the available backend-languages (checks for the language-keys in typo3conf/l10n/
+ *
+ * @return array The available languages
+ */
+ function getAvailableBELanguages() {
+ global $LANG;
+
+ $lang = array();
+
+ $theLanguages = t3lib_div::trimExplode('|',TYPO3_languages);
+ foreach($theLanguages as $val) {
+ if ($val != 'default' && !@is_dir(PATH_typo3conf.'l10n/'.$val)) {
+ continue;
+ }
+
+ $lang[$val] = $LANG->sL('LLL:EXT:setup/mod/locallang.xml:lang_'.$val);
+ }
+ return $lang;
+ }
/**
* Returns a page record (of page with $id) with an extra field "_thePath" set to the record path IF the WHERE clause, $perms_clause, selects the record. Thus is works as an access check that returns a page record if access was granted, otherwise not.
Index: t3lib/class.t3lib_div.php
===================================================================
--- t3lib/class.t3lib_div.php (Revision 105)
+++ t3lib/class.t3lib_div.php (Revision 110)
@@ -1474,6 +1474,21 @@
function uniqueArray($valueArray) {
return array_unique($valueArray);
}
+
+ /**
+ * Returns the key of a value in a given array.
+ *
+ * @param array Array containing the values
+ * @param string Value to search for and if found return its key.
+ * @return string/int The key of the value in the array
+ */
+ function getArrayKeyForValue($array,$cmpValue) {
+ foreach ($array as $k=>$v) {
+ if ($v == $cmpValue) {
+ return $k;
+ }
+ }
+ }
/**
* Removes the value $cmpValue from the $array if found there. Returns the modified array
Index: typo3/index.php
===================================================================
--- typo3/index.php (Revision 105)
+++ typo3/index.php (Revision 110)
@@ -97,7 +97,6 @@
// Internal, static:
var $redirectToURL; // Set to the redirect URL of the form (may be redirect_url or "alt_main.php")
- var $L_vars; // Set to the labels used for the login screen.
// Internal, dynamic:
var $content; // Content accumulation
@@ -137,9 +136,6 @@
$this->loginSecurityLevel = $TYPO3_CONF_VARS['BE']['loginSecurityLevel'];
}
- // Getting login labels:
- $this->L_vars = explode('|',$TYPO3_CONF_VARS['BE']['loginLabels']);
-
// Setting the redirect URL to "alt_main.php" if no alternative input is given:
$this->redirectToURL = $this->redirect_url ? $this->redirect_url : 'alt_main.php';
@@ -188,9 +184,6 @@
// Initialize interface selectors:
$this->makeInterfaceSelectorBox();
- // Replace an optional marker in the "Administration Login" label
- $this->L_vars[6] = str_replace("###SITENAME###",$TYPO3_CONF_VARS['SYS']['sitename'],$this->L_vars[6]);
-
// Creating form based on whether there is a login or not:
if (!$BE_USER->user['uid']) {
@@ -290,35 +283,46 @@
* @return string HTML output
*/
function makeLoginForm() {
+ global $LANG, $LOCAL_LANG, $TYPO3_CONF_VARS;
+ // output the language-selector-menu
+ $lang = t3lib_BEfunc::getAvailableBELanguages();
+ asort($lang);
+
+ $content .= '
';
+
// There must be no white-spaces outside of the tags (needed for buggy IE)
$content.= '
Index: typo3/template.php
===================================================================
--- typo3/template.php (Revision 105)
+++ typo3/template.php (Revision 110)
@@ -2112,7 +2112,14 @@
// ******************************************************
require_once(PATH_typo3.'sysext/lang/lang.php');
$LANG = t3lib_div::makeInstance('language');
-$LANG->init($BE_USER->uc['lang']);
+if ($BE_USER->uid) {
+ $LANG->init($BE_USER->uc['lang']);
+} elseif (t3lib_div::_GP('lang') != '' && strpos(TYPO3_languages, t3lib_div::_GP('lang')) !== false) {
+ $LANG->init(t3lib_div::_GP('lang'));
+} else {
+ $langs = t3lib_BEfunc::getBrowserAcceptLanguages();
+ $LANG->init($langs);
+}
Index: typo3/sysext/lang/locallang_core.xml
===================================================================
--- typo3/sysext/lang/locallang_core.xml (Revision 105)
+++ typo3/sysext/lang/locallang_core.xml (Revision 110)
@@ -87,6 +87,10 @@
+
+
+
+
@@ -150,7 +154,8 @@
-
+
+
@@ -184,6 +189,21 @@
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
\ Kein Zeilenvorschub am Ende der Datei
Index: typo3/sysext/lang/lang.php
===================================================================
--- typo3/sysext/lang/lang.php (Revision 105)
+++ typo3/sysext/lang/lang.php (Revision 110)
@@ -136,6 +136,10 @@
* @return void
*/
function init($lang,$altPath='') {
+
+ if (!is_array($lang)) {
+ $lang = array($lang);
+ }
// Initialize the conversion object:
$this->csConvObj = t3lib_div::makeInstance('t3lib_cs');
@@ -146,12 +150,21 @@
// Finding the requested language in this list based on the $lang key being inputted to this function.
$ls = explode('|',$this->langSplit);
- while(list($i,$v)=each($ls)) {
- if ($v==$lang) { // Language is found. Configure it:
- $this->langSplitIndex=$i; // The index of the language as found in the TYPO3_languages list
- $this->lang = $lang; // The current language key
+ foreach ($lang as $l) {
+ if ($l == 'en') {
+ $l = 'default';
+ }
+ // if this language is not available, proceed with the next
+ if ($l != 'default' && !@is_dir(PATH_typo3conf.'l10n/'.$l)) {
+ continue;
+ }
+
+ if (in_array($l, $ls)) { // Language is found. Configure it:
+ $this->langSplitIndex=t3lib_div::getArrayKeyForValue($ls, $l); // The index of the language as found in the TYPO3_languages list
+ $this->lang = $l; // The current language key
if ($this->helpUrlArray[$this->lang]) $this->typo3_help_url=$this->helpUrlArray[$this->lang]; // The help URL if different from the default.
if ($this->charSetArray[$this->lang]) $this->charSet=$this->charSetArray[$this->lang]; // The charset if different from the default.
+ break;
}
}