2015-08-20 45 views
8

Używam codeigniter, a język jest określany przez sesję.Jak udostępnić stronę facebookowi/twitterowi w innym języku?

I wrrite meta danych, facebook/twitter chwycić dane i dzielić strony:

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

Funkcja set_lang jest sprawdzenie sesji tak: praca funkcja

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

Udział dobrze w przeglądarce, jednak chciałbym udostępnić link także za pomocą aplikacji mobilnej. Ponieważ aplikacja nie zawiera sesji, nie można sprawdzić języka. Ponadto, jeśli wstawię parametr do linku, np.

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

Wtedy mój związek akcji będzie również rozwiązać język.

Wszelkie pomysły? Wielkie dzięki za pomoc.

Odpowiedz

1

Jeśli umieścisz informację o języku wewnątrz link jak ten http://example.com/video/view/1/english, wówczas informacji język może być traktowana jako parametr przez kontroler (byłoby to pomogło, jeśli wspomniane co był kontroler tutaj, ale powiedzmy, że to view()) i używać go w następujący sposób:

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

} 

następnie można zmodyfikować funkcję set_lang(), aby wziąć dwa parametry $var (oryginalne) i $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"; 
    } 
} 

W ten sposób, jeśli język ustawiony jest w url, $CI->session->userdata('site_lang') będzie ignorowany.

Teraz, jeśli chcesz przekazać $lang do widzenia, robisz to tak:

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

A w widoku:

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

Jest trochę hacky, ale powinno działać.

2

Czy zapoznałeś się z dokumentacją internationalization?

Korzystanie z metatagów (jeden wskazujący na każdy język) powinno pokazywać łącze w ojczystym języku użytkowników Facebooka przez Facebook.com.

Wypróbuj: D

+1

Działa to wyłącznie w przypadku artykułów Open Graph. W przypadku zwykłych postów, które zawierają link, nie działa - post będzie zawsze wyświetlał szczegóły łącza w języku, który uzyskał Facebook, żądając szczegółów łącza, alternatywne ustawienia lokalne nie są brane pod uwagę w tym kontekście. (Zostało to potwierdzone przez inżynierów Facebooka.) – CBroe

+0

Czy próbowałeś wstępnie zeskrobać wiele lokalizacji na połączonej stronie? Czy to miało znaczenie? –

+1

Tak, nie ma znaczenia. Jak już powiedziałem, w przypadku normalnych postów nie jest on teraz wdrażany, co potwierdza pracownik FB. – CBroe