如何使用不同语言在Facebook/Twitter上分享页面?

8

我正在使用CodeIgniter框架,语言由会话决定。

我编写了元数据,Facebook / Twitter抓取这些数据并分享页面:

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

set_lang函数的作用是检查会话,如下所示:

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

浏览器中的分享功能正常,但我也想通过移动应用程序分享链接。由于该应用程序不包含会话,因此无法检查语言。另外,如果我将参数放在链接中,例如:

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

那么我的分享链接也将固定语言。

有什么想法吗?非常感谢您的帮助。

2个回答

2

你有没有浏览过国际化文档?

使用og:locale:alternate元标签(每种语言一个)应该会在Facebook.com上显示链接以Facebook用户的母语展示。

试一试吧 :D


1
这仅适用于Open Graph故事。对于包含链接的普通帖子,它不起作用 - 帖子将始终以Facebook在请求链接详细信息时获取的语言显示链接详细信息,而在该上下文中不考虑备用语言环境。(这已由Facebook工程师确认。) - CBroe
你尝试过预先抓取链接页面的多个区域吗?这样做有什么不同吗? - Tom Waddington
1
是的,没有什么区别。正如我所说,目前针对普通帖子尚未实现该功能,这已经得到了Facebook员工的确认。 - CBroe
您需要设置og标签<meta property="og:locale" content="en_US" />。另外,您是否尝试在HTML标记中设置页面语言http://www.w3schools.com/tags/ref_language_codes.asp? - astroanu

1
如果您将有关语言的信息放在链接中,例如http://example.com/video/view/1/english,则控制器可以将语言信息作为参数获取(如果您提到了这里的控制器会更好,但让我们假设它是view()),并像这样使用它:
function view($param1, $lang = false){

}

您可以修改函数set_lang(),以接受两个参数$var(原始参数)和$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";
   }
}

这样,如果语言在url中设置了,$CI->session->userdata('site_lang') 将会被忽略。
现在,如果你想将 $lang 传递给你的视图,你可以这样做:
function view($param1, $lang = false){
     $local['lang_by_url'] = $lang;   
     $this->load->view('the_view', $local);
}

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

这有点取巧,但应该可以工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接