2015-08-20 17 views
8

Sto usando il codeigniter e la lingua è determinata dalla sessione.Come condividere la pagina su facebook/twitter con una lingua diversa?

ho wrrite i meta-dati, facebook/twitter afferrare i dati e condividere la pagina:

 echo "<meta name='twitter:card' content='summary' />"; 
     echo "<meta property='og:title' content='" . $video->{set_lang("title")} . "' />"; 
     echo "<meta property='og:description' content='" . $video->{set_lang("description")} . "' />"; 
     echo "<meta property='og:image' content='" . (isset($video->image_url) ? site_url("thumbnail/" . $video->image_url) : $video->thumbnail) . "' />"; 

La funzione set_lang è quello di controllare la sessione in questo modo: la funzione

function set_lang($var) { 
    $CI = & get_instance(); 
    $lang = $CI->session->userdata('site_lang'); 
    if ($lang == "english") { 
     return $var; 
    } else if ($lang == "zh_tw") { 
     return $var . "_tw"; 
    } else if ($lang == "zh_cn") { 
     return $var . "_cn"; 
    } 
} 

La quota di lavoro bene nel browser, tuttavia, mi piacerebbe condividere il link anche con l'app mobile. Poiché l'app non contiene sessioni, non può controllare la lingua. Inoltre, se inserisco il parametro nel link, ad es.

http://example.com/video/view/1/english

Poi il mio link di condivisione sarà anche risolvere la lingua.

Qualche idea? Grazie mille per l'aiuto.

risposta

1

Se mettete le informazioni circa la lingua all'interno del link come questo http://example.com/video/view/1/english, quindi le informazioni di lingua può essere preso come parametro dal regolatore (avrebbe aiutato se lei ha detto che cosa era il controller qui, ma diciamo che è view()), e usarlo, in questo modo:

function view($param1, $lang = false){ 

} 

è quindi possibile modificare la funzione set_lang(), di prendere due parametri, $var (quello originale) e $lang:

function set_lang($var, $lang = false){ 
    if(!$lang){ 
     $CI = & get_instance(); 
     $lang = $CI->session->userdata('site_lang'); 
    } 
    if ($lang == "english") { 
     return $var; 
    } else if ($lang == "zh_tw") { 
     return $var . "_tw"; 
    } else if ($lang == "zh_cn") { 
     return $var . "_cn"; 
    } 
} 

In questo modo, se la lingua è impostata nell'url, $CI->session->userdata('site_lang') verrà ignorata.

Ora, se si desidera passare $lang alla visualizzazione, lo fate come questo:

function view($param1, $lang = false){ 
    $local['lang_by_url'] = $lang; 
    $this->load->view('the_view', $local); 
} 

E secondo lei:

echo "<meta name='twitter:card' content='summary' />"; 
echo "<meta property='og:title' content='" $video->{set_lang("title", $lang_by_url)} . "' />"; 
... 
... 

è un po 'hacky, ma dovrebbe funzionare.

2

Hai esplorato la documentazione internationalization?

Utilizzando i meta tag og:locale:alternate (uno che punta a ciascuna lingua) dovrebbe mostrare il collegamento nella lingua nativa degli utenti di Facebook su Facebook.com.

Provalo ora!: D

+1

Questo funziona solo per le storie di Open Graph. Per i post normali che includono un link, non funziona - il post mostrerà sempre i dettagli del collegamento nella lingua che Facebook ha ricevuto quando ha richiesto i dettagli del collegamento, le impostazioni locali alternative non sono state prese in considerazione in quel contesto. (Ciò è stato confermato dagli ingegneri di Facebook.) – CBroe

+0

Hai provato a pre-raschiare più impostazioni locali della pagina collegata? Questo ha fatto la differenza? –

+1

Sì, non fa la differenza. Come ho già detto, per i post normali non è implementato sin d'ora, come confermato da un dipendente di FB. – CBroe