I believe that the language codes are de_DE, de_CH, fr_CH… Anyway, yesterday I had to work on a similar problem and I created a solution for that, so you could start with this snippet:
class MslsFlexibleLink extends MslsLink {
protected $format_string = '<img src="{src}" alt="{alt}"/>';
public function __toString() {
$path = get_template_directory_uri() . '/alternative-flags/';
$temp = $this->get_arr();
$this->format_string = str_replace( '{alt}', $temp['txt'] );
if ( 'de_CH' != $temp['alt'] ) {
return str_replace( '{src}', $path . 'de_CH.png', $this->format_string );
}
return str_replace( '{src}', $path . 'de_DE.png', $this->format_string );
}
}
function get_flexible_link( $display ) {
return new MslsFlexibleLink();
}
add_filter( 'msls_link_create', 'get_flexible_link' );
With something like this you can than going to create your own flag-directory (which resides in the directory of the current theme) and store there the flags ‘de_DE.png’ and ‘de_CH.png’. The rest is up to you.
Let me know if this helps.
Cheers,
Dennis.
Thank you for the snippet.
When I print_r($temp['alt'])
I get following arrays for the three launguages:
[txt] => ancotech GmbH Deutschland [src] => http://ch-fr.ancotech.com/wp-content/plugins/multisite-language-switcher/flags/de.png [alt] => de_DE
[txt] => ancotech AG Schweiz [src] => http://ch-fr.ancotech.com/wp-content/plugins/multisite-language-switcher/flags/de.png [alt] => de_DE
[txt] => anotech SA Suisse [src] => http://www.ancotech.de/wp-content/plugins/multisite-language-switcher/flags/fr.png [alt] => fr_FR
There are no yx_CH languages, otherwise there wouldn’t be a problem -.- So I changed the ‘txt’ of each language (de-de, ch-de and ch-fr) and ajusted the code:
class MslsFlexibleLink extends MslsLink {
protected $format_string = '<img src="{src}" alt="{alt}" />';
public function __toString() {
$path = get_stylesheet_directory_uri() . '/images/flags/';
$temp = $this->get_arr();
$this->format_string = str_replace( '{alt}', $temp['txt'], $this->format_string );
// echo $temp['alt'];
if ( 'ch-de' == $temp['txt'] ) {
return str_replace( '{src}', $path . 'ch-de.png', $this->format_string );
} else if ('ch-fr' == $temp['txt']) {
return str_replace( '{src}', $path . 'ch-fr.png', $this->format_string );
} else if ('hu-hu' == $temp['txt']) {
return str_replace( '{src}', $path . 'hu-hu.png', $this->format_string );
}else {
return str_replace( '{src}', $path . 'de-de.png', $this->format_string );
}
}
}
function get_flexible_link( $display ) {
return new MslsFlexibleLink();
}
add_filter( 'msls_link_create', 'get_flexible_link' );
This works for now 🙂
While testing the snippet I found another problem 🙁 I can’t assign a page of the same language. e.g. If I connect a ch-de page to a de-de page, it won’t happen (here is only ch-fr connected but de-de not). Same happens the other way round (connect de-de to ch-de). When trying to make the connections from ch-fr it makes some strange things with the form (one field remains empty) but sometimes both sites are correctly connected (both sites are ok here vs. de-de is correct connected but the ch-de page is not the one I wanted)
I don’t get it. Maybe it’s better to just make connections between ch-de and ch-fr and deactivate de-de.
I would go to /wp-content/languages and copy the files de_DE.mo + de_DE.po to de_CH.mo + de_CH.po. After that you can edit these with poEdit and activate German (Switzerland) in the General Settings.
Ok, that’s completely new for me.
I’ve copied de_DE.mo and de_DE.po, changed their names and uploaded them again in the same folder. I even put them into the ‘themes/<mytheme>/languages/’ folder but I don’t get ‘German (Switzerland)’ or anything like it as a language to select in WordPress.
I don’t know what to change in the .po file with poEdit. I changed the Settings (Alt + Enter) > Project Name (German (Switzerland)) and Settings (Alt + Enter) > Language (de_CH), but this didn’t do the trick. I deleted de_CH.mo and saved de_CH.po again for a new compilation for the .mo file. Uploaded this again on the two folders but nothing changed -.-
I’m sorry to disturb you with that 🙁
Thank you soo much! This was the final step.
For everyone who’ll have a similar problem, here is my complete code to add two new languages with custom flags.
functions.php
if(class_exists('MslsLink')): // if the plugin isn't activated on all sites
class MslsFlexibleLink extends MslsLink {
protected $format_string = '<img src="{src}" alt="{alt}" />';
public function __toString() {
$path = get_stylesheet_directory_uri() . '/images/flags/'; // change get_stylesheet_directory_uri to get_template_directory_uri if you're not working with Child Themes
$temp = $this->get_arr();
$this->format_string = str_replace( '{alt}', $temp['txt'], $this->format_string );
switch($temp['alt']){ // add your needed languages here
case 'de_CH': return str_replace( '{src}', $path . 'ch-de.png', $this->format_string ); break;
case 'fr_CH': return str_replace( '{src}', $path . 'ch-fr.png', $this->format_string ); break;
case 'de_DE': return str_replace( '{src}', $path . 'de-de.png', $this->format_string ); break;
case 'hu_HU': return str_replace( '{src}', $path . 'hu-hu.png', $this->format_string ); break;
default: return str_replace( '{src}', $path . 'ch-de.png', $this->format_string ); break;
}
}
}
function get_flexible_link($display) {
return new MslsFlexibleLink();
}
add_filter('msls_link_create', 'get_flexible_link');
endif;
// Use this to add more languages into the Settings-Dropdown
function add_de_ch($output, $lang_files, $current) {
array_unshift($output, '<option value="de_CH"'.selected($current, 'de_CH', false).'>'.__('Schweiz DE').'</option>');
return $output;
}
add_filter('mu_dropdown_languages', 'add_de_ch', 10, 3);
function add_fr_ch( $output, $lang_files, $current) {
array_unshift($output, '<option value="fr_CH"'.selected($current, 'fr_CH', false).'>'.__('Schweiz FR').'</option>');
return $output;
}
add_filter('mu_dropdown_languages', 'add_fr_ch', 10, 3);
The language files .mo and .po are in the normal language folder ‘/wp-content/languages/’