In my header.phpheader.php
, where I want qTranslate language chooser to live, I put this in:
Then, I added this code to functions.phpfunctions.php
. It's a little redundant in that it repeats the built-in qTranslate options (image, text, dropdown) which I am not using on my page - but I wanted to retain the code since my filter is overwriting the 'qtrans_generateLanguageSelectCode'qtrans_generateLanguageSelectCode
function. (If anyone can figure out how to just ADD a style in and not overwrite the whole function, that would be awesome!)
The style that I use is called 'code' (you'll see it near the bottom) and just outputs the language code - ie: FRFR
and ENEN
in my case. You could write whatever output you want by creating a new style:
if( function_exists( 'qtrans_getLanguage' ) )
{
// qTranslate Language Select Code filter
add_filter( 'qtrans_generateLanguageSelectCode', 'qtrans_SelectCode' );
function qtrans_SelectCode($style='' $style = '', $id=''$id = '' ) {
global $q_config;
if($style=='' $style == '' )
$style='text'; $style = 'text';
if( is_bool( $style )&&$style && $style )
$style='image'; $style = 'image';
if( is_404() )
$url = get_option( 'home' );
else
$url = '';
if($id=='' $id == '' )
$id = 'qtranslate';
$id .= '-chooser';
switch( $style ) {
case 'image':
case 'text':
case 'dropdown':
echo '<ul class="qtrans_language_chooser" id="' . $id . '">';
foreach( qtrans_getSortedLanguages() as $language ) {
$classes = array( 'lang-' . $language );
if( $language == $q_config['language'] )
$classes[] = 'active';
echo '<li class="' . implode( ' ', $classes ) . '"><a href="' . qtrans_convertURL( $url, $language ) . '"';
// set hreflang
echo ' hreflang="' . $language . '" title="' . $q_config['language_name'][$language] . '"';
if($style=='image' $style == 'image' )
echo ' class="qtrans_flag qtrans_flag_' . $language . '"';
echo '><span';
if($style=='image' $style == 'image' )
echo ' style="display:none"';
echo '>' . $q_config['language_name'][$language] . '</span></a></li>';
}
echo "</ul><div class=\"qtrans_widget_end\"></div>";
if($style=='dropdown' $style == 'dropdown' ) {
echo "<script type=\"text/javascript\">\n// <![CDATA[\r\n";
echo "var lc = document.getElementById('" . $id . "');\n";
echo "var s = document.createElement('select');\n";
echo "s.id = 'qtrans_select_" . $id . "';\n";
echo "lc.parentNode.insertBefore(s,lc);";
// create dropdown fields for each language
foreach( qtrans_getSortedLanguages() as $language ) {
echo qtrans_insertDropDownElement( $language, qtrans_convertURL( $url, $language ), $id );
}
// hide html language chooser text
echo "s.onchange = function() { document.location.href = this.value;}\n";
echo "lc.style.display='none';\n";
echo "// ]]>\n</script>\n";
}
break;
case 'both':
echo '<ul class="qtrans_language_chooser" id="' . $id . '">';
foreach( qtrans_getSortedLanguages() as $language ) {
echo '<li';
if( $language == $q_config['language'] )
echo ' class="active"';
echo '><a href="' . qtrans_convertURL( $url, $language ) . '"';
echo ' class="qtrans_flag_' . $language . ' qtrans_flag_and_text" title="' . $q_config['language_name'][$language] . '"';
echo '><span>' . $q_config['language_name'][$language] . '</span></a></li>';
}
echo "</ul><div class=\"qtrans_widget_end\"></div>";
break;
case 'code':
$count = 0;
foreach( qtrans_getSortedLanguages() as $language ) {
if( $count > 0 )
print ' ';
$count++;
if( $language == $q_config['language'] ) {
print '<span class="qtrans_language_chooser active" title="' . $q_config['language_name'][$language] . '">';
print $language;
print '</span>';
}
else {
print '<a href="' . qtrans_convertURL( $url, $language ) . '" class="qtrans_language_chooser"';
print ' hreflang="' . $language . '" title="' . $q_config['language_name'][$language] . '">';
print $language;
print '</a>';
}
}
break;
}
}
}
It is important to enclose the functions in: if(function_exists('qtrans_getLanguage')) in
if(function_exists('qtrans_getLanguage'))
in case the qTranslate plugin breaks or you deactivate it, otherwise your functions.phpfunctions.php
will not work properly and you won't be able to get at your site!