2015-08-20 17 views
8

Tôi đang sử dụng trình viết mã và ngôn ngữ được xác định theo phiên.Cách chia sẻ trang lên facebook/twitter bằng ngôn ngữ khác?

tôi wrrite các dữ liệu meta, facebook/twitter lấy các dữ liệu và chia sẻ trang:

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

Chức năng set_lang là để kiểm tra phiên như thế này:

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

Tỷ chức năng công việc tốt trong trình duyệt, tuy nhiên, tôi cũng muốn chia sẻ liên kết bằng ứng dụng dành cho thiết bị di động. Vì ứng dụng không chứa phiên nên không thể kiểm tra ngôn ngữ. Ngoài ra, nếu tôi đặt tham số trong liên kết, ví dụ:

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

Sau đó, liên kết chia sẻ của tôi cũng sẽ khắc phục ngôn ngữ.

Bất kỳ ý tưởng nào? Cảm ơn rất nhiều vì đã giúp đỡ.

Trả lời

1

Nếu bạn đặt các thông tin về các ngôn ngữ bên trong liên kết như http://example.com/video/view/1/english này, sau đó các thông tin ngôn ngữ có thể được thực hiện như một tham số của bộ điều khiển (nó sẽ giúp nếu bạn đề cập đến những gì là bộ điều khiển ở đây, nhưng chúng ta hãy nói rằng nó view()), và sử dụng nó, như thế này:

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

} 

sau đó bạn có thể thay đổi chức năng set_lang(), lấy hai tham số, $var (bản gốc) và $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"; 
    } 
} 

Bằng cách này, nếu ngôn ngữ được đặt trong url, $CI->session->userdata('site_lang') sẽ bị bỏ qua.

Bây giờ nếu bạn muốn vượt qua $lang để xem, bạn làm điều đó như thế này:

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

Và theo quan điểm của bạn:

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

Đó là một chút hacky, nhưng nó phải làm việc.

2

Bạn đã khám phá tài liệu internationalization chưa?

Sử dụng og:locale:alternate thẻ meta (một trỏ đến từng ngôn ngữ) sẽ hiển thị liên kết bằng ngôn ngữ gốc của người dùng Facebook trên Facebook.com.

Hãy thử nó ra: D

+1

Chỉ hoạt động cho các câu chuyện trong Biểu đồ mở. Đối với các bài đăng bình thường bao gồm liên kết, bài đăng không hoạt động - bài đăng sẽ luôn hiển thị chi tiết liên kết bằng ngôn ngữ mà Facebook nhận được khi yêu cầu chi tiết liên kết, các ngôn ngữ thay thế sẽ không được tính đến trong ngữ cảnh đó. (Điều này đã được các kỹ sư Facebook xác nhận.) – CBroe

+0

Bạn đã cố gắng tìm kiếm trước nhiều miền địa phương của trang được liên kết chưa? Điều đó tạo nên sự khác biệt? –

+1

Vâng, không tạo sự khác biệt. Như tôi đã nói, đối với các bài bình thường, nó không được thực hiện như hiện nay, như được xác nhận bởi một nhân viên FB. – CBroe

Các vấn đề liên quan