Facebook javascript用不同的语言

时间:2011-11-27 13:48:31

标签: javascript django facebook facebook-like session-cookies

我添加的我的Facebook javascript使用"喜欢"来自facebook和其他组件的按钮,如下所示:

<div id="fb-root"></div>
<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId      : '164355773607006', // App ID
      channelURL : '//WWW.KOOLBUSINESS.COM/static/channel.html', // Channel File
      status     : true, // check login status
      cookie     : true, // enable cookies to allow the server to access the session
      oauth      : true, // enable OAuth 2.0
      xfbml      : true  // parse XFBML
    });

    // Additional initialization code here
  };
  // Load the SDK Asynchronously
  (function(d){
     var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
     js = d.createElement('script'); js.id = id; js.async = true;
     {% ifequal host "www.montao.com.br" %}
     js.src = "//connect.facebook.net/pt_BR/all.js";
     {% else %}
     js.src = "//connect.facebook.net/en_US/all.js";
     {% endifequal %}
     d.getElementsByTagName('head')[0].appendChild(js);
   }(document));
</script>

我可以将它放在页面底部而不是顶部,因为这会加快页面加载速度吗?

如何检查频道文件是否正常工作?

我的频道文件可以在其他域上,但它是相同的应用程序(我的应用程序提供多个域名)吗?

我的服务器是否有另一种方式来访问会话而不是使用cookie?

在葡萄牙语和英语之间切换比我更好吗?我的方式有效,但也许是低劣的。更好的方法是查找语言的HTTP ACCEPT_LANGUAGE或cookie或http get参数。在这种情况下,一个域应该是葡萄牙语,但是当用django_language_cookie切换我的应用程序的语言时,切换FB组件上的语言会很好。所以我想我可以用javascript阅读django_language_cookie而不是检查域名,但是我必须学习如何去做。

您能评论或帮助我解决方案吗?

谢谢

2 个答案:

答案 0 :(得分:1)

您的频道文件必须位于同一个域中,请求文档才能提供。 那么,当您在浏览器中请求URL并获取内容时,您可以检查它是否正常工作;)

我以下列方式为我的项目切换JS-SDK的语言: 使用签名请求,会有一个“locale”变量传递给您的服务器。 您可以通过解码SR并访问$ sr ['user'] ['locale']来获取它(或将解码后的SR传递给模板引擎并通过{{SR.user.locale}}访问它 - 这映射到字符串格式为“en_US”或用户在Facebook上设置的任何语言。 将JS-SDK嵌入正确的本地化非常简单,然后:

//connect.facebook.net/{{SR.user.locale}}/all.js

好吧,如果你只想保留Protugese / English开关,因为当你的应用只是PT / EN时,例如德语对话框会很奇怪,那么请将其包含如下:

//connect.facebook.net/{% if SR.user.locale == "pt_BR" %}pt_BR{% else %}en_US{% endif %}/all.js

但是我会坚持使用第一个解决方案,因为SDK打开的对话框会被用户体验为facebook的一部分 - 而且他们会用他们设置facebook的语言来解释它。

希望这对你有所帮助! (如果您的应用有多个页面,请记住缓存此区域设置,因为您只在第一次请求时获得RT;)

答案 1 :(得分:1)

区域设置解决方案应该可以正常工作。但要注意FB不支持阳光下的每个场所。您可以在此处找到他们支持的区域设置:

https://www.facebook.com/translations/FacebookLocales.xml

他们没有广泛记录这一点。如果您的用户区域设置不在列出的区域中,则该用户将在该js请求上获得404,并且结果是已损坏或不存在的FB按钮。

我要补充的第二点是在channelURL附近。如果你正在使用它(对你的网站性能和IE用户来说是灾难性的,如果你没有),那么你现在有第二个地方你可能需要设置这个区域设置:在那个channel.html里面的js包含。他们没有在任何地方提到这一点,但我会犹豫是否开始混合和匹配不同版本的js文件(en_US)用于反向通道通信,其中来自主页面(js.src)的初始调用是其他一些语言环境。 / p> 祝你好运!