在不重新加载页面的情况下像按钮语言一样更改 facebook
change facebook like button language without reloading page
我正在使用 ReactJS 构建我的网站,并且我有一个语言开关。我在不重新加载页面的情况下在英语和法语之间切换,只是安装了一组新的 reactjs 组件。
我的一个组件上有一个 Facebook LIKE 按钮,但是因为 facebook-jssdk 是独立于组件结构加载的,所以它被锁定为首先加载的语言。
有没有办法在不重新加载页面的情况下更改加载的 facebook-jssdk 的语言?
@trekforever:在看到你的评论之前,我昨晚真的做了这个!
这是我的最终解决方案:
componentWillMount: function(){
// check for a fb-like button and remove it
// if it exists!
if( window.FB ) {
// remove all instances of facebook and elements
$("#facebook-jssdk, #fb-root").remove()
delete window.FB
}
// we need to use this method to let facebook-jssdk
// know it needs to parse the xfbml after it loads
// into our page
window.fbAsyncInit = function() {
window.FB.init({
xfbml : true,
version : 'v2.0'
});
};
// we don't have to go through all the checks and balances that
// come in the fb jssdk init code by default, we just got rid of them
var fjs = document.getElementsByTagName('script')[0],
js = document.createElement('script')
js.id = 'facebook-jssdk'
js.src = '//connect.facebook.net/en_US/sdk.js'
fjs.parentNode.insertBefore(js, fjs)
}
我的第二语言是 fr_CA
所以我只是替换了这一行:
js.src = '//connect.facebook.net/en_US/sdk.js'
有了这个:
js.src = '//connect.facebook.net/fr_CA/sdk.js'
现在我可以用任一(或任何)语言重新呈现组件,它也会以正确的语言向我显示一个 Facebook Like 按钮!
为了兴趣,这里是同样的东西,但是 Google 的 Recaptcha:
componentWillMount: function(){
// this is stolen directly from the facebook-jssdk
// implementation...
if( window.grecaptcha ){
$("#grecaptcha-jssdk").remove()
delete window.grecaptcha
}
var gjs = document.getElementsByTagName('script')[0],
js = document.createElement('script')
js.id = 'grecpatcha-jssdk'
js.src = 'https://www.google.com/recaptcha/api.js?hl=fr-CA'
gjs.parentNode.insertBefore(js, gjs)
}
它没有默认命名为 grecaptcha-jssdk
,我只是为了保持一致而选择坚持使用该名称。
国际化快乐!
我正在使用 ReactJS 构建我的网站,并且我有一个语言开关。我在不重新加载页面的情况下在英语和法语之间切换,只是安装了一组新的 reactjs 组件。
我的一个组件上有一个 Facebook LIKE 按钮,但是因为 facebook-jssdk 是独立于组件结构加载的,所以它被锁定为首先加载的语言。
有没有办法在不重新加载页面的情况下更改加载的 facebook-jssdk 的语言?
@trekforever:在看到你的评论之前,我昨晚真的做了这个!
这是我的最终解决方案:
componentWillMount: function(){
// check for a fb-like button and remove it
// if it exists!
if( window.FB ) {
// remove all instances of facebook and elements
$("#facebook-jssdk, #fb-root").remove()
delete window.FB
}
// we need to use this method to let facebook-jssdk
// know it needs to parse the xfbml after it loads
// into our page
window.fbAsyncInit = function() {
window.FB.init({
xfbml : true,
version : 'v2.0'
});
};
// we don't have to go through all the checks and balances that
// come in the fb jssdk init code by default, we just got rid of them
var fjs = document.getElementsByTagName('script')[0],
js = document.createElement('script')
js.id = 'facebook-jssdk'
js.src = '//connect.facebook.net/en_US/sdk.js'
fjs.parentNode.insertBefore(js, fjs)
}
我的第二语言是 fr_CA
所以我只是替换了这一行:
js.src = '//connect.facebook.net/en_US/sdk.js'
有了这个:
js.src = '//connect.facebook.net/fr_CA/sdk.js'
现在我可以用任一(或任何)语言重新呈现组件,它也会以正确的语言向我显示一个 Facebook Like 按钮!
为了兴趣,这里是同样的东西,但是 Google 的 Recaptcha:
componentWillMount: function(){
// this is stolen directly from the facebook-jssdk
// implementation...
if( window.grecaptcha ){
$("#grecaptcha-jssdk").remove()
delete window.grecaptcha
}
var gjs = document.getElementsByTagName('script')[0],
js = document.createElement('script')
js.id = 'grecpatcha-jssdk'
js.src = 'https://www.google.com/recaptcha/api.js?hl=fr-CA'
gjs.parentNode.insertBefore(js, gjs)
}
它没有默认命名为 grecaptcha-jssdk
,我只是为了保持一致而选择坚持使用该名称。
国际化快乐!