Navelfluff är en trespråkig blogg. Ibland häller jag ur mej på svenska, ibland på finska och ibland på engelska, lite beroende på vad jag har att säja och till vilken publik jag riktar mej. Språkindelningen annoterar jag med Wordpressens kategorier, vilka jag oxå använder för kategorisering av själva innehållet (geek, Timor-Leste, pynja, osv). Det är en debattfråga huruvida det kan tänkas syntaktiskt korrekt att använda samma slags metadata att annotera både innehållet och språket för inlägget men jag geek och inte lingvist, så jag godkänner mitt beteenede i detta fall.
Wordpress å andra sidan är inte mångspråkig, vilket kanske inte är så konstigt med tanke på att de flesta bloggar skrivs på ett och samma språk. Visst, man kan få WP att tala ett annat språk, men det är fortfarande bara tal om ett annat språk i taget. Vilket jag tyckte var lite trist.
Ända tills lite tidigare idag tyckte nämligen Navelfluff att “please leave a comment” för alla inlägg, oavsett vilket språk inlägget var skrivet på. Och i samband med en kommentar jag fick angående Tarski-temats lite lakoniska “no comments”-statustext i anslutning till inlägg som saknar kommentarer (till skillnad från inlägg som inte önskar kommentarer) så tog jag och gjorde nåt åt saken.
Följande plugin lokaliserar skriv-en-kommentar- eller inga-kommentarer -texten. Pluggaren baserar sej på change_no_comments_text -pluginnen av Tony Trainor. Förklaring följer efter koden.
function change_comments_text($text, $number) {
global $post;
$lang = "any" ;
$cats = wp_get_post_categories( $post->ID );
$stac = array_flip( $cats );
if( array_key_exists( 3, $stac )) $lang = "sv";
if( array_key_exists( 4, $stac )) $lang = "fi";
$text = Array( "any" => array( 0 => "Please leave a comment! ",
1 => "1 comment ",
2 => "$number comments "),
"sv" => array( 0 => "Skriv en kommentar! ",
1 => "1 kommentar ",
2 => "$number kommentarer "),
"fi" => array( 0 => "Anna palautetta! ",
1 => "1 palaute ",
2 => "$number palautetta "));
$num = $number;
if( $num > 2 ) $num = 2;
$ret = $text[$lang][$num];
return $ret;
}
add_filter('comments_number', 'change_comments_text', 10, 2);
Varje postning har ett antal kategorier (noll eller flera) och de representeras som en array vars värden utgör kategori-ID:na. Efter en del reverse-engineering kategori-arrayn (att de facto läsa dokumentationen är så tråkigt
) insåg jag att mina svenskspråkiga inlägg har en kategori-ID 3 och mina finskspråkiga ID 4. [0]
I koden används ett lite fult trick, nämligen array_flip samt array_key_exists för att kolla om artikeln har kategori-ID tre eller fyra. Samma sak skulle ja antagligen skrivit elegantare med array_search men av nån orsak fick jag inte den funktionen att funktionera. Men så är jag oxå nybörjare, så jag har en bortförklaring.
Slutligen konstateras att jag har ingen aning vad parametrarna 10 och 2 gör i slutet av alltsammans.
Har du en flerspråkig blogg (hej skrubu! hej nikc!) och språk-kategoriserar dina inlägg så behöver du “bara” gissa fram vilka kategori-ID:n du använder (vink: ersätt return $ret; i koden ovan med return "$ret <!-- $lang $num " . implode( "|", array_values( $cats )) . " -->";), infoga ett kommentarblock i början av koden med de av WP obligerade kommentarfälten, inslut kodsnutten i <?php ... ?>-markering, och slutligen spara hela rasket i ditt wp-content/plugins -direktorat.
Skulle det mot all vettig förmodan finnas en social beställning på denna pluggare i ett människovänligare format, så … vänligen skriv en kommentar!
[0] Övriga (samt o-språk-kategoriseade) inlägg behandlas som om de vore engelska och de med flera språk-kategoriseringar får den sista lokaliseringen i listan. Det är så sällan jag skriver ett inlägg med flera såpråk att jag inte orkar koda om pluggaren så att den lokaliserar till alla noterade språk.
