Debug multilang website

This commit is contained in:
Laurent Destailleur 2020-02-27 21:43:11 +01:00
parent a3e56994b6
commit 2d841d9d83
2 changed files with 78 additions and 13 deletions

View File

@ -784,7 +784,32 @@ class Translate
{ {
// We must keep only main languages // We must keep only main languages
if ($mainlangonly) { if ($mainlangonly) {
$arrayofspecialmainlanguages = array('en_US', 'sq_AL', 'ar_SA', 'eu_ES', 'bn_DB', 'bs_BA', 'ca_ES', 'zh_TW', 'cs_CZ', 'da_DK', 'et_EE', 'ka_GE', 'el_GR', 'he_IL', 'kn_IN', 'km_KH', 'ko_KR', 'lo_LA', 'nb_NO', 'fa_IR', 'sr_RS', 'sl_SI', 'uk_UA', 'vi_VN'); $arrayofspecialmainlanguages = array(
'en'=>'en_US',
'sq'=>'sq_AL',
'ar'=>'ar_SA',
'eu'=>'eu_ES',
'bn'=>'bn_DB',
'bs'=>'bs_BA',
'ca'=>'ca_ES',
'zh'=>'zh_TW',
'cs'=>'cs_CZ',
'da'=>'da_DK',
'et'=>'et_EE',
'ka'=>'ka_GE',
'el'=>'el_GR',
'he'=>'he_IL',
'kn'=>'kn_IN',
'km'=>'km_KH',
'ko'=>'ko_KR',
'lo'=>'lo_LA',
'nb'=>'nb_NO',
'fa'=>'fa_IR',
'sr'=>'sr_RS',
'sl'=>'sl_SI',
'uk'=>'uk_UA',
'vi'=>'vi_VN'
);
if (strtolower($regs[1]) != strtolower($regs[2]) && ! in_array($dir, $arrayofspecialmainlanguages)) continue; if (strtolower($regs[1]) != strtolower($regs[2]) && ! in_array($dir, $arrayofspecialmainlanguages)) continue;
} }
// We must keep only languages into MAIN_LANGUAGES_ALLOWED // We must keep only languages into MAIN_LANGUAGES_ALLOWED

View File

@ -1275,7 +1275,7 @@ class Website extends CommonObject
/** /**
* Component to select language inside a container (Full CSS Only) * Component to select language inside a container (Full CSS Only)
* *
* @param array|string $languagecodes 'auto' to show all languages available for page, or language codes array like array('en_US','fr_FR','de_DE','es_ES') * @param array|string $languagecodes 'auto' to show all languages available for page, or language codes array like array('en','fr','de','es')
* @param Translate $weblangs Language Object * @param Translate $weblangs Language Object
* @param string $morecss More CSS class on component * @param string $morecss More CSS class on component
* @param string $htmlname Suffix for HTML name * @param string $htmlname Suffix for HTML name
@ -1287,6 +1287,33 @@ class Website extends CommonObject
if (!is_object($weblangs)) return 'ERROR componentSelectLang called with parameter $weblangs not defined'; if (!is_object($weblangs)) return 'ERROR componentSelectLang called with parameter $weblangs not defined';
$arrayofspecialmainlanguages = array(
'en'=>'en_US',
'sq'=>'sq_AL',
'ar'=>'ar_SA',
'eu'=>'eu_ES',
'bn'=>'bn_DB',
'bs'=>'bs_BA',
'ca'=>'ca_ES',
'zh'=>'zh_TW',
'cs'=>'cs_CZ',
'da'=>'da_DK',
'et'=>'et_EE',
'ka'=>'ka_GE',
'el'=>'el_GR',
'he'=>'he_IL',
'kn'=>'kn_IN',
'km'=>'km_KH',
'ko'=>'ko_KR',
'lo'=>'lo_LA',
'nb'=>'nb_NO',
'fa'=>'fa_IR',
'sr'=>'sr_RS',
'sl'=>'sl_SI',
'uk'=>'uk_UA',
'vi'=>'vi_VN'
);
// Load tmppage if we have $websitepagefile defined // Load tmppage if we have $websitepagefile defined
$tmppage = new WebsitePage($this->db); $tmppage = new WebsitePage($this->db);
@ -1302,7 +1329,7 @@ class Website extends CommonObject
} }
} }
// Fill with existing translation, nothing if none // Fill $languagecodes array with existing translation, nothing if none
if (!is_array($languagecodes) && $pageid > 0) if (!is_array($languagecodes) && $pageid > 0)
{ {
$languagecodes = array(); $languagecodes = array();
@ -1325,16 +1352,17 @@ class Website extends CommonObject
} }
} }
} }
// Now $languagecodes is always an array // Now $languagecodes is always an array. Example array('en', 'fr', 'es');
$languagecodeselected = $weblangs->defaultlang; // Because we must init with a value, but real value is the lang of main parent container $languagecodeselected = substr($weblangs->defaultlang, 0, 2); // Because we must init with a value, but real value is the lang of main parent container
if (!empty($websitepagefile)) if (!empty($websitepagefile))
{ {
$pageid = str_replace(array('.tpl.php', 'page'), array('', ''), basename($websitepagefile)); $pageid = str_replace(array('.tpl.php', 'page'), array('', ''), basename($websitepagefile));
if ($pageid > 0) if ($pageid > 0)
{ {
$languagecodeselected = $tmppage->lang; $pagelang = substr($tmppage->lang, 0, 2);
if (!in_array($tmppage->lang, $languagecodes)) $languagecodes[] = $tmppage->lang; // We add language code of page into combo list $languagecodeselected = substr($pagelang, 0, 2);
if (!in_array($pagelang, $languagecodes)) $languagecodes[] = $pagelang; // We add language code of page into combo list
} }
} }
@ -1373,12 +1401,18 @@ class Website extends CommonObject
'; ';
$out .= '</style>'; $out .= '</style>';
$out .= '<ul class="componentSelectLang'.$htmlname.($morecss ? ' '.$morecss : '').'">'; $out .= '<ul class="componentSelectLang'.$htmlname.($morecss ? ' '.$morecss : '').'">';
if ($languagecodeselected) if ($languagecodeselected)
{ {
$shortcode = strtolower(substr($languagecodeselected, -2)); // Convert $languagecodeselected into a long language code
if (strlen($languagecodeselected) == 2) {
$languagecodeselected = (empty($arrayofspecialmainlanguages[$languagecodeselected]) ? $languagecodeselected.'_'.strtoupper($languagecodeselected) : $arrayofspecialmainlanguages[$languagecodeselected]);
}
$countrycode = strtolower(substr($languagecodeselected, -2));
$label = $weblangs->trans("Language_".$languagecodeselected); $label = $weblangs->trans("Language_".$languagecodeselected);
if ($shortcode == 'us') $label = preg_replace('/\s*\(.*\)/', '', $label); if ($countrycode == 'us') $label = preg_replace('/\s*\(.*\)/', '', $label);
$out .= '<a href="'.$url.$languagecodeselected.'"><li><img height="12px" src="medias/image/common/flags/'.$shortcode.'.png" style="margin-right: 5px;"/>'.$label; $out .= '<a href="'.$url.$languagecodeselected.'"><li><img height="12px" src="medias/image/common/flags/'.$countrycode.'.png" style="margin-right: 5px;"/>'.$label;
$out .= '<span class="fa fa-caret-down" style="padding-left: 5px;" />'; $out .= '<span class="fa fa-caret-down" style="padding-left: 5px;" />';
$out .= '</li></a>'; $out .= '</li></a>';
} }
@ -1387,11 +1421,17 @@ class Website extends CommonObject
{ {
foreach ($languagecodes as $languagecode) foreach ($languagecodes as $languagecode)
{ {
// Convert $languagecode into a long language code
if (strlen($languagecode) == 2) {
$languagecode = (empty($arrayofspecialmainlanguages[$languagecode]) ? $languagecode.'_'.strtoupper($languagecode) : $arrayofspecialmainlanguages[$languagecode]);
}
if ($languagecode == $languagecodeselected) continue; // Already output if ($languagecode == $languagecodeselected) continue; // Already output
$shortcode = strtolower(substr($languagecode, -2));
$countrycode = strtolower(substr($languagecode, -2));
$label = $weblangs->trans("Language_".$languagecode); $label = $weblangs->trans("Language_".$languagecode);
if ($shortcode == 'us') $label = preg_replace('/\s*\(.*\)/', '', $label); if ($countrycode == 'us') $label = preg_replace('/\s*\(.*\)/', '', $label);
$out .= '<a href="'.$url.$languagecode.'"><li><img height="12px" src="medias/image/common/flags/'.$shortcode.'.png" style="margin-right: 5px;"/>'.$label; $out .= '<a href="'.$url.$languagecode.'"><li><img height="12px" src="medias/image/common/flags/'.$countrycode.'.png" style="margin-right: 5px;"/>'.$label;
if (empty($i) && empty($languagecodeselected)) $out .= '<span class="fa fa-caret-down" style="padding-left: 5px;" />'; if (empty($i) && empty($languagecodeselected)) $out .= '<span class="fa fa-caret-down" style="padding-left: 5px;" />';
$out .= '</li></a>'; $out .= '</li></a>';
$i++; $i++;