php
  • facebook
  • codeigniter
  • twitter
  • share
  • 2015-08-20 12 views 8 likes 
    8

    Ich verwende Codeigniter und die Sprache wird von der Sitzung bestimmt.Wie teile ich die Seite mit anderen Sprachen auf Facebook/Twitter?

    I wrrite die Meta-Daten, Facebook/Twitter die Daten packen und die Seite wählen:

     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) . "' />"; 
    

    Die set_lang Funktion ist die Sitzung wie folgt zu überprüfen:

    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"; 
        } 
    } 
    

    Der Anteil Funktion Arbeit Gut im Browser, aber ich möchte den Link auch per Handy-App teilen. Da die App keine Sitzung enthält, kann sie die Sprache nicht überprüfen. Auch wenn ich den Parameter in den Link setze, z.

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

    Dann wird mein Anteil Link reparieren auch die Sprache.

    Irgendwelche Ideen? Vielen Dank für Ihre Hilfe.

    Antwort

    1

    Wenn Sie die Informationen über die Sprache innerhalb der Link wie diesen http://example.com/video/view/1/english setzen, dann kann die Sprache Info als Parameter von der Steuerung entnommen werden (es erwähnt, wenn Sie geholfen hätte was hier war der Controller, aber wir sagen es view() ist), und es verwenden, wie folgt aus:

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

    Sie können dann ändern Funktion set_lang(), zwei Parameter zu nehmen, $var (das Original) und $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"; 
        } 
    } 
    

    Auf diese Weise wird $CI->session->userdata('site_lang') ignoriert, wenn die Sprache in URL festgelegt ist.

    Nun, wenn Sie $lang zu Ihrer Ansicht übergeben wollen, tun Sie es wie folgt aus:

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

    Und in der Ansicht:

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

    Es ist ein wenig hacky, aber es sollte funktionieren.

    2

    Haben Sie die internationalization Dokumentation erforscht?

    Verwenden von Meta-Tags (einer, der auf jede Sprache zeigt) sollte den Link in der Facebook-Benutzer Muttersprache auf Facebook.com zeigen.

    Probieren Sie es aus: D

    +1

    Das funktioniert nur für Open Graph-Storys. Für normale Posts, die einen Link enthalten, funktioniert es nicht - der Post zeigt immer die Linkdetails in der Sprache an, die Facebook beim Anfordern der Linkdetails erhalten hat, alternative Locales werden in diesem Kontext nicht berücksichtigt. (Dies wurde von Facebook-Technikern bestätigt.) – CBroe

    +0

    Haben Sie versucht, mehrere Gebietsschemas der verknüpften Seite vorzukritzeln? Hat das einen Unterschied gemacht? –

    +1

    Ja, macht keinen Unterschied. Wie gesagt, für normale Posts ist es ab sofort nicht implementiert, wie von einem FB-Mitarbeiter bestätigt. – CBroe

     Verwandte Themen

    • Keine verwandten Themen^_^