Implemented auto-language selection (feature #1107) based on HTTP_ACCEPT_LANGUAGE headers.
This commit is contained in:
committed by
madmuffin
parent
a2c49c3071
commit
bb315b783f
@@ -797,9 +797,10 @@ CREATE TABLE `panel_diskspace_admins` (
|
||||
|
||||
DROP TABLE IF EXISTS `panel_languages`;
|
||||
CREATE TABLE `panel_languages` (
|
||||
`id` int(11) unsigned NOT NULL auto_increment,
|
||||
`language` varchar(30) NOT NULL default '',
|
||||
`file` varchar(255) NOT NULL default '',
|
||||
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`language` varchar(30) NOT NULL DEFAULT '',
|
||||
`iso` char(3) NOT NULL DEFAULT 'foo',
|
||||
`file` varchar(255) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM ;
|
||||
|
||||
@@ -807,23 +808,24 @@ CREATE TABLE `panel_languages` (
|
||||
# Dumping data for table `panel_languages`
|
||||
#
|
||||
|
||||
INSERT INTO `panel_languages` VALUES (1, 'Deutsch', 'lng/german.lng.php');
|
||||
INSERT INTO `panel_languages` VALUES (2, 'English', 'lng/english.lng.php');
|
||||
INSERT INTO `panel_languages` VALUES (3, 'Français', 'lng/french.lng.php');
|
||||
INSERT INTO `panel_languages` VALUES (4, 'Chinese', 'lng/zh-cn.lng.php');
|
||||
INSERT INTO `panel_languages` VALUES (5, 'Catalan', 'lng/catalan.lng.php');
|
||||
INSERT INTO `panel_languages` VALUES (6, 'Español', 'lng/spanish.lng.php');
|
||||
INSERT INTO `panel_languages` VALUES (7, 'Português', 'lng/portugues.lng.php');
|
||||
INSERT INTO `panel_languages` VALUES (8, 'Russian', 'lng/russian.lng.php');
|
||||
INSERT INTO `panel_languages` VALUES (9, 'Danish', 'lng/danish.lng.php');
|
||||
INSERT INTO `panel_languages` VALUES (10, 'Italian', 'lng/italian.lng.php');
|
||||
INSERT INTO `panel_languages` VALUES (11, 'Bulgarian', 'lng/bulgarian.lng.php');
|
||||
INSERT INTO `panel_languages` VALUES (12, 'Slovak', 'lng/slovak.lng.php');
|
||||
INSERT INTO `panel_languages` VALUES (13, 'Dutch', 'lng/dutch.lng.php');
|
||||
INSERT INTO `panel_languages` VALUES (14, 'Hungarian', 'lng/hungarian.lng.php');
|
||||
INSERT INTO `panel_languages` VALUES (15, 'Swedish', 'lng/swedish.lng.php');
|
||||
INSERT INTO `panel_languages` VALUES (16, 'Czech', 'lng/czech.lng.php');
|
||||
INSERT INTO `panel_languages` VALUES (17, 'Polski', 'lng/polish.lng.php');
|
||||
INSERT INTO `panel_languages` (`id`, `language`, `iso`, `file`) VALUES
|
||||
(1, 'Deutsch', 'de', 'lng/german.lng.php'),
|
||||
(2, 'English', 'en', 'lng/english.lng.php'),
|
||||
(3, 'Français', 'fr', 'lng/french.lng.php'),
|
||||
(4, 'Chinese', 'zh', 'lng/zh-cn.lng.php'),
|
||||
(5, 'Catalan', 'ca', 'lng/catalan.lng.php'),
|
||||
(6, 'Español', 'es', 'lng/spanish.lng.php'),
|
||||
(7, 'Português', 'pt', 'lng/portugues.lng.php'),
|
||||
(8, 'Russian', 'ru', 'lng/russian.lng.php'),
|
||||
(9, 'Danish', 'da', 'lng/danish.lng.php'),
|
||||
(10, 'Italian', 'it', 'lng/italian.lng.php'),
|
||||
(11, 'Bulgarian', 'bg', 'lng/bulgarian.lng.php'),
|
||||
(12, 'Slovak', 'sk', 'lng/slovak.lng.php'),
|
||||
(13, 'Dutch', 'nl', 'lng/dutch.lng.php'),
|
||||
(14, 'Hungarian', 'hu', 'lng/hungarian.lng.php'),
|
||||
(15, 'Swedish', 'sv', 'lng/swedish.lng.php'),
|
||||
(16, 'Czech', 'cz', 'lng/czech.lng.php'),
|
||||
(17, 'Polski', 'pl', 'lng/polish.lng.php');
|
||||
|
||||
# --------------------------------------------------------
|
||||
|
||||
|
||||
@@ -1832,6 +1832,70 @@ if(isFroxlorVersion('0.9.27')) {
|
||||
if ($db->num_rows($handle) < 1) {
|
||||
$db->query("INSERT INTO `panel_settings` (`settinggroup`, `varname`, `value`) VALUES ('phpfpm', 'aliasconfigdir', '/var/www/php-fpm/');");
|
||||
}
|
||||
|
||||
// Insert ISO-Codes into database. Default value is foo, which is not a valid language code.
|
||||
$db->query("ALTER TABLE `panel_languages` ADD `iso` CHAR( 3 ) NOT NULL DEFAULT 'foo' AFTER `language`");
|
||||
|
||||
$handle = $db->query("SELECT `language` FROM `panel_languages` WHERE `iso`='foo'");
|
||||
|
||||
$langauges = $db->fetch_array($handle);
|
||||
foreach($languages as $language){
|
||||
switch ($language) {
|
||||
case "Deutsch":
|
||||
$db->query("UPDATE `panel_languages` SET `iso`='de' WHERE `language` = 'Deutsch'");
|
||||
break;
|
||||
case "English":
|
||||
$db->query("UPDATE `panel_languages` SET `iso`='en' WHERE `language` = 'English'");
|
||||
break;
|
||||
case "Français":
|
||||
$db->query("UPDATE `panel_languages` SET `iso`='fr' WHERE `language` = 'Français'");
|
||||
break;
|
||||
case "Chinese":
|
||||
$db->query("UPDATE `panel_languages` SET `iso`='zh' WHERE `language` = 'Chinese'");
|
||||
break;
|
||||
case "Catalan":
|
||||
$db->query("UPDATE `panel_languages` SET `iso`='ca' WHERE `language` = 'Catalan'");
|
||||
break;
|
||||
case "Español":
|
||||
$db->query("UPDATE `panel_languages` SET `iso`='es' WHERE `language` = 'Español'");
|
||||
break;
|
||||
case "Português":
|
||||
$db->query("UPDATE `panel_languages` SET `iso`='pt' WHERE `language` = 'Português'");
|
||||
break;
|
||||
case "Danish":
|
||||
$db->query("UPDATE `panel_languages` SET `iso`='da' WHERE `language` = 'Danish'");
|
||||
break;
|
||||
case "Italian":
|
||||
$db->query("UPDATE `panel_languages` SET `iso`='it' WHERE `language` = 'Italian'");
|
||||
break;
|
||||
case "Bulgarian":
|
||||
$db->query("UPDATE `panel_languages` SET `iso`='bg' WHERE `language` = 'Bulgarian'");
|
||||
break;
|
||||
case "Slovak":
|
||||
$db->query("UPDATE `panel_languages` SET `iso`='sk' WHERE `language` = 'Slovak'");
|
||||
break;
|
||||
case "Dutch":
|
||||
$db->query("UPDATE `panel_languages` SET `iso`='nl' WHERE `language` = 'Dutch'");
|
||||
break;
|
||||
case "Russian":
|
||||
$db->query("UPDATE `panel_languages` SET `iso`='ru' WHERE `language` = 'Russian'");
|
||||
break;
|
||||
case "Hungarian":
|
||||
$db->query("UPDATE `panel_languages` SET `iso`='hu' WHERE `language` = 'Hungarian'");
|
||||
break;
|
||||
case "Swedish":
|
||||
$db->query("UPDATE `panel_languages` SET `iso`='sv' WHERE `language` = 'Swedish'");
|
||||
break;
|
||||
case "Czech":
|
||||
$db->query("UPDATE `panel_languages` SET `iso`='cz' WHERE `language` = 'Czech'");
|
||||
break;
|
||||
case "Polski":
|
||||
$db->query("UPDATE `panel_languages` SET `iso`='pl' WHERE `language` = 'Polski'");
|
||||
break;
|
||||
default:
|
||||
showUpdateStep("Sorry, but I don't know the ISO-639 language code for ".$language.". Please update the entry in `panel_languages` manually.\n");
|
||||
}
|
||||
}
|
||||
|
||||
updateToVersion('0.9.28-svn1');
|
||||
}
|
||||
|
||||
22
lib/init.php
22
lib/init.php
@@ -266,6 +266,7 @@ else
|
||||
|
||||
$langs = array();
|
||||
$languages = array();
|
||||
$iso = array();
|
||||
|
||||
// query the whole table
|
||||
$query = 'SELECT * FROM `' . TABLE_PANEL_LANGUAGE . '` ';
|
||||
@@ -275,6 +276,7 @@ $result = $db->query($query);
|
||||
while($row = $db->fetch_array($result))
|
||||
{
|
||||
$langs[$row['language']][] = $row;
|
||||
$iso[$row['iso']] = $row['language'];
|
||||
}
|
||||
|
||||
// buildup $languages for the login screen
|
||||
@@ -291,7 +293,7 @@ if (isset($userinfo['language']) && isset($languages[$userinfo['language']]))
|
||||
else
|
||||
{
|
||||
if(!isset($userinfo['def_language'])
|
||||
|| !isset($languages[$userinfo['def_language']]))
|
||||
|| !isset($languages[$userinfo['def_language']]))// this will always evaluat true, since it is the above statement inverted. @todo remove
|
||||
{
|
||||
if(isset($_GET['language'])
|
||||
&& isset($languages[$_GET['language']]))
|
||||
@@ -300,7 +302,22 @@ else
|
||||
}
|
||||
else
|
||||
{
|
||||
$language = $settings['panel']['standardlanguage'];
|
||||
$accept_langs = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']);
|
||||
for($i = 0; $i<count($accept_langs); $i++) {
|
||||
# this only works for most common languages. some (uncommon) languages have a 3 letter iso-code.
|
||||
# to be able to use these also, we would have to depend on the intl extension for php (using Locale::lookup or similar)
|
||||
# as long as froxlor does not support any of these languages, we can leave it like that.
|
||||
if(isset($iso[substr($accept_langs[$i],0,2)])) {
|
||||
$language=$iso[substr($accept_langs[$i],0,2)];
|
||||
break;
|
||||
}
|
||||
}
|
||||
unset($iso);
|
||||
|
||||
// if HTTP_ACCEPT_LANGUAGES has no valid langs, use default (very unlikely)
|
||||
if(!strlen($language)>0) {
|
||||
$language = $settings['panel']['standardlanguage'];
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -309,6 +326,7 @@ else
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// include every english language file we can get
|
||||
foreach($langs['English'] as $key => $value)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user