Gestire lingua su facebook con php

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Salve a tutti.
Mi sto cimentando in una cosa un po particolare. Avete presente lo stato di facebook? Il riquadro con scritto "a cosa stai pensando". Bene se si inserisce un link all'interno del riquadro questi verrà condiviso con un'immagine e con una descrizione che sono presenti all'interno del sito condiviso (tramite appositi meta).

Bene io vorrei gestire la lingua di questi meta.
Vi faccio un esempio pratico:

Prendete questo link di Whatsapp: http://blog.whatsapp.com/?p=304

Se lo condividete con un ip italiano, la condivisione avverrà in italiano, se lo condividete con un ip straniero la condivisione avverrà nella lingua di appartenenza.

Ho provato a fare una cosa simile ma non funziona e non so per quale motivo. Vi posto le due paginette:

index.php
PHP:
<?
/*function userLang()   
{  
    if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))   
    {  
        $lang = explode(";", $_SERVER['HTTP_ACCEPT_LANGUAGE']);  
        $lang = explode(",", $lang['0']);  
        $lang = explode("-", $lang['0']);  
        return $lang['0'];  
    }  
}

$var = userLang();*/

if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ip = $_SERVER['REMOTE_ADDR'];
}
function ipToCountry($ip){
    $info = file_get_contents("http://who.is/whois-ip/ip-address/$ip");
    list($a, $b) = explode('COUNTRY: ', strtoupper($info));
    return substr(trim($b),0,2);
}

$var = strtolower(ipToCountry($ip));

header("location: page.php?lang=".$var);//redirect
exit;
?>

page.php
PHP:
<?
$lingua = $_GET['lang'];

if($lingua == 'it'){
	$og_titolo = 'Titolo Italiano!';
	$ogsite_name = 'Nome italiano!';
	$og_desc = 'Desc italiano';
	$og_url = 'http://miosito.it/asd/page.php?lang='.$lingua;
}elseif($lingua == 'de'){
	$og_titolo = 'titolo de';
	$ogsite_name = 'nome de!';
	$og_desc = 'desc de';
	$og_url = 'http://miosito.it/asd/page.php?lang='.$lingua;
}elseif($lingua !== 'it' || $lingua !== 'de' || $lingua == ''){
	$og_titolo = 'titolo ing';
	$ogsite_name = 'nome ing!';
	$og_desc = 'desc ing';
	$og_url = 'http://miosito/asd/page.php';
}

$og_img = 'http://www.shortphatclever.com/wp-content/uploads/2013/10/test-all-the-things.jpg'; 

?>
<!DOCTYPE html>
<html>
	<head>
		<!-- Facebook Meta -->
		<meta name="robots" content="noindex, nofollow">
		<meta property="og:title" content="<?php echo $og_titolo;?>" />
		<meta property="og:type" content="website" />
		<meta property="og:image" content="<?php echo $og_img;?>" />
		<meta property="og:url" content="<?php echo $og_url;?>" />
		<meta property="og:site_name" content="<?php echo $ogsite_name;?>" />
		<meta property="og:description" content="<?php echo $og_desc; ?>" />
	</head>

<?php echo $lingua; ?>
<br/>

<br/>
<?php echo $og_url; ?>
</html>

Come potete vedere nell'index.php ho lasciato commentato la parte dove rileva la lingua del browser (che ovviamente non funziona).

Se vado su https://developers.facebook.com/tools/debug/

Mi vede sempre la lingua inglese (quindi il terzo caso della pagina.php) Perché? C'è qualcuno che mi da una mano per fare chiarezza? :D
 
se scrivi una semantica così ti stampa a video la sigla della nazionalità del browser controllando e lasciando stampare se la nazionalità é it en de...

PHP:
<?PHP

function lingua($lang, $lingua){

$lingua =substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

 if($lingua == "it") {$lang = "it";} // italiano
 
   elseif($lingua == "en") {$lang = "en";} // inglese
   elseif($lingua == "de") {$lang = "de";} // tedesco

 return $lang;
}

echo lingua($lang);
?>
 
se scrivi una semantica così ti stampa a video la sigla della nazionalità del browser controllando e lasciando stampare se la nazionalità é it en de...

PHP:
<?PHP

function lingua($lang, $lingua){

$lingua =substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

 if($lingua == "it") {$lang = "it";} // italiano
 
   elseif($lingua == "en") {$lang = "en";} // inglese
   elseif($lingua == "de") {$lang = "de";} // tedesco

 return $lang;
}

echo lingua($lang);
?>

Ciao perdonami ma non ho ben capito, se utilizzo il codice che mi hai riportato tu facebook quando condivido il link sulla pagina prenderà la lingua dell'utente che condividerà il link??

Comunque se hai dato un occhiata al codice che ho lasciato su vedi che faccio una cosa simile nell'index nella parte commentata. Non credo sia quello che cerco
 
non capisco perchè utilizzi l'explode come funzione, il mio codice voleva suggerirti di utilizzare la funzione substr, facebook permette solo terminate cose ed utilizza un linguaggio di marcatura proprio, che non centra con php... devi vedere cosa ti permette di fare facebook con le sue api.
 
Ultima modifica:
Per scrupolo ho fatto una prova con il codice che mi hai postato ma non cambia la situazione che avevo prima, prova a condividere questo link su facebook
http://mckya.com/asd/test.php

Vedrai che lo condivide in inglese (titolo ing desc ing)

Il codice l'ho modificato così:

PHP:
<?PHP

function lingua($lang, $lingua){

$lingua =substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

 if($lingua == "it") {$lang = "it";} // italiano
 
   elseif($lingua == "en") {$lang = "en";} // inglese
   elseif($lingua == "de") {$lang = "de";} // tedesco

 return $lang;
}
$pollo = lingua($lang);

if($pollo == 'it'){
	$og_titolo = 'Titolo Italiano!';
	$ogsite_name = 'Nome italiano!';
	$og_desc = 'Desc italiano';
}elseif($pollo == 'de'){
	$og_titolo = 'titolo de';
	$ogsite_name = 'nome de!';
	$og_desc = 'desc de';
}elseif($pollo !== 'it' || $pollo !== 'de' || $pollo == ''){
	$og_titolo = 'titolo ing';
	$ogsite_name = 'nome ing!';
	$og_desc = 'desc ing';
}
$og_url = 'http://mckya.com/asd/test.php';
$og_img = 'http://www.shortphatclever.com/wp-content/uploads/2013/10/test-all-the-things.jpg'; 

?>
<!DOCTYPE html>
<html>
	<head>
		<!-- Facebook Meta -->
		<meta name="robots" content="noindex, nofollow">
		<meta property="og:title" content="<?php echo $og_titolo;?>" />
		<meta property="og:type" content="website" />
		<meta property="og:image" content="<?php echo $og_img;?>" />
		<meta property="og:url" content="<?php echo $og_url;?>" />
		<meta property="og:site_name" content="<?php echo $ogsite_name;?>" />
		<meta property="og:description" content="<?php echo $og_desc; ?>" />
	</head>

<?php echo $pollo; ?>
<br/>

<br/>
<?php echo $og_url; ?>
</html>

Molto probabilmente sbaglio qualcosa, facebook mi fa impazzire!!! XD

EDIT: ho postato mentre scrivevi la risposta
non capisco perchè utilizzi l'explode come funzione, il mio codice voleva suggerirti di utilizzare la funzione substr, facebook permette solo terminate cose ed utilizzaun linguaggio di marcatura proprio, che non centra con php... devi vedere cosa ti permette di fare facebook con le sue api

Hai ragione forse devo utilizzare le api, sai come fare per caso?

EDIT2:

ho trovato questa risposta può essermi utile secondo te? http://ux.stackexchange.com/questions/29281/sharing-links-on-facebook-with-multi-language-site
 
Ultima modifica:
forse si la pagiana che hai postato mostra come utilizzare un url per fb che sembrerebbe mandarti in due cartelle differenti dove risiede la pagina a seconda della lingua... cmq la pagna di sviluppo ufficiale di fb è https://developers.facebook.com/ qui trovi informazioni più attendibili ma ora non ho tempo di aiutarti prova guardare tu caso mai ci sentiamo più tardi...

Se puoi darmi una mano te ne sono grato, ovviamente quando puoi!! Intanto continuo a sperimentare U.u
 
Ciao Longo. Il problema è non la gestione della lingua ma è far capire a facebook di inserire la lingua italiana quando si tratta di un utente italiano, tedesca se si tratta di un utente tedesco e inglese per tutti gli altri. Ho fatto così: per il riconoscimento della lingua mi affido o all'IP o alla lingua del browser(devo decidere). Il riconoscimento avviene nell'index.PHP , dopo che la lingua è stata decisa si viene reindirizzati alla page.PHP a cui si trasmettono i dati della lingua tramite un get es: page.PHP?lang=it recupero il get e a quel punto gestisco le lingue. Adesso se posto l'index.PHP su facebook il recupero dei meta da parte di facebook è sempre in inglese a prescindere da chi lo posta, e non so perché.
Questo è quanto, nel pomeriggio do un occhio al link che mi hai dato, grazie!

Inviato dal mio Nexus 4 con Tapatalk 4
 
Forse le mie poche conoscenze mi rendono cieco XD
Ma non vedo una soluzione idonea nel link che mi hai passato Longo, sembra piuttosto un'ottima soluzione per l'autopost (per la creazione di piccole app FB) ma che al momento non cerco :(

Inviato dal mio Nexus 4 con Tapatalk 4
 
Infatti il link era riferito alla seconda domanda.
Per il problema principale farò delle prove, avvisa se fai qualche passo avanti.
 
Infatti il link era riferito alla seconda domanda.
Per il problema principale farò delle prove, avvisa se fai qualche passo avanti.

Purtroppo non ho idea di come fare, credo che la chiave sia nella gestione dei meta di facebook. Sono proprio fermo :\ non capisco come whatsapp ci riesca!

mi togli una curiosità? come mai questo url non funziona più???

Ciao dici il link mckya che ho lasciato nella pagina precedente? L'ho rimosso per fare altre prove, comunque non sono andato più in la del mio naso XD
 
Comunque se vai su http://mckya.com/asd/ ti porta su un index.php che riconosce la lingua e poi ti porta su page.php che gestisce i meta di fb in base alla lingua.

Continuo su questo link le varie prove
 
Che seccatura, grazie al suggerimento di giamma ho snellito il codice usando la substr.
Tuttavia su facebook non è cambiato nulla. Se condivido il link http://mckya.com/asd/ da sempre tutto in inglese nonostante il mio browser sia italiano.

Guardate i diversi link sul debug di faccialibro:
Questo è quello di whatsapp
https://developers.facebook.com/tools/debug/og/object?q=http://blog.whatsapp.com/?p=304

Questo il mio
https://developers.facebook.com/tools/debug/og/object?q=http://mckya.com/asd/

Che differenze ci sono ?_?
 
Ultima modifica:
a dirti il vero ho provato adesso il link di mckya.com come risultato non mi da niente che mi faccia capire che effetivamente da fb rilevi la lingua mi mette:
immagine
// poi scrive questo
titolo ing
mckya.com
desc ing

come mai mi mette ing chi sta utilizzando qualcosa in inglese io no, se stà rilevando, rileva la lingua di chi ???
 
a dirti il vero ho provato adesso il link di mckya.com come risultato non mi da niente che mi faccia capire che effetivamente da fb rilevi la lingua mi mette:
immagine
// poi scrive questo
titolo ing
mckya.com
desc ing

come mai mi mette ing chi sta utilizzando qualcosa in inglese io no, se stà rilevando, rileva la lingua di chi ???

Esatto!! Il problema è proprio questo!!
La questione è da dividere in 2 casi:
1. Se vai sul link via browser la lingua ti viene riconosciuta infatti nell'url vedrai lang=it e nella pagina vedrai un contenuto in italiano
2. Se invece metti lo stesso link su facebook ti appare sempre la lingua inglese, perché?? Su sta cosa sto impazzendo


Inviato dal mio Nexus 4 con Tapatalk 4
 

Discussioni simili