2011-09-30 83 views
13

我的網站是多語言,我有一個類似於FB的按鈕。我希望有不同語言的帖子。Facebook的元標記與區域設置不工作

根據Facebook文檔,如果我使用元標記og:locale和og:locale:alternate,則scraper會讓我的網站信息傳遞參數「locale」和標題「X-Facebook-Locale」,但它也不會發送。(https://developers.facebook.com/docs/beta/opengraph/internationalization/)。所以帖子總是以en_US結尾。

任何人都有同樣的問題?

+0

你有沒有發現這種行爲的解決方案? –

回答

0

您在加載Javascript SDK時指定了什麼語言?很容易忽視這一點。「

默認一個是en_US,看到js.src線

<div id="fb-root"></div> 
<script>(function(d, s, id) { 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) return; 
    js = d.createElement(s); js.id = id; 
    js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=127211380649475"; 
    fjs.parentNode.insertBefore(js, fjs); 
}(document, 'script', 'facebook-jssdk'));</script> 
0

我有同樣的問題。

的Like按鈕將Facebook的只有他自己的屬性data-href="www.example.com/yourpage",不OG元標記值。之後,Fb將meta標籤粘貼到您的頁面中,並從中創建Wall帖子。
所以實際上這篇文章總是以您的頁面默認語言顯示。

一個解決方案,以在用戶語言的帖子是:

  • 添加?lang=userlanguage到Like按鈕的數據href網址
  • 給yourpage能力得到userlanguage和顯示meta標籤OG:標題和OG:描述適當的翻譯 (如用PHP $ _GET)

所以Fb的將刮yourpage在使用者語言,並創建一個區域後。

不幸的是 Fb的創建爲每個不同的URL ?lang=userlanguage1userlanguage2單個對象......和每個對象都有自己的粉絲列表。
因此,yourpage的每個翻譯都會有他的區域粉絲。
:-(


類似的問題:Open Graph Localization

17

我得到這個工作The documentation不是很詳細,下面是詳細介紹

這裏是我的Open Graph區域標籤:

<meta property="og:locale" content="en_US" /> 
<meta property="og:locale:alternate" content="en_US" /> 
<meta property="og:locale:alternate" content="fr_CA" /> 

非常重要:The documentation使得看起來og:locale應始終反映頁面的「默認」區域設置。不是這種情況;這樣做會阻止刮板檢索其他語言。 og_locale必須反映頁面的當前區域設置。換句話說,如果刮板(或用戶)請求fr_CA內容,確保og_locale在響應設置爲fr_CA

og:locale:alternate指定所有可能的語言環境。這樣,無論刮板是要求en_US還是fr_CA,它仍然知道兩者都存在。

這裏的我問了Facebook刮刀重新處理我的網頁:

curl -d "id=https://apps.facebook.com/everydaybarilla/&scrape=true" https://graph.facebook.com 

這裏的響應:

{ 
    "url": "http://apps.facebook.com/everydaybarilla/", 
    "type": "website", 
    "title": "Barilla\u2019s Every Day, Every Way Contest", 
    "locale": { 
     "locale": "en_us", 
     "alternate": [ 
     "fr_ca" 
     ] 
    }, 
    "image": [ 
     { 
     "url": "http://everydaybarilla.ssl.spidermarketing.ca/assets/img/thumbnails/5.png" 
     }, 
     { 
     "url": "http://everydaybarilla.ssl.spidermarketing.ca/assets/img/thumbnails/4.png" 
     }, 
     { 
     "url": "http://everydaybarilla.ssl.spidermarketing.ca/assets/img/thumbnails/3.png" 
     }, 
     { 
     "url": "http://everydaybarilla.ssl.spidermarketing.ca/assets/img/thumbnails/en-2.png" 
     }, 
     { 
     "url": "http://everydaybarilla.ssl.spidermarketing.ca/assets/img/thumbnails/en-1.png" 
     } 
    ], 
    "description": "Barilla Canada is whisking one lucky winner and a guest off to Italy on an 8-day Italian culinary adventure for 2 in the Barilla Every Day, Every Way Contest!", 
    "site_name": "Barilla\u2019s Every Day, Every Way Contest", 
    "updated_time": "2012-04-16T17:59:38+0000", 
    "id": "10150594698421968", 
    "application": { 
     "id": "317271281656427", 
     "name": "Barilla\u2019s Every Day, Every Way Contest", 
     "url": "http://www.facebook.com/apps/application.php?id=317271281656427" 
    } 
} 

刮刀正確返回默認語言環境中的數據,但根據the documentation ,似乎刮刀應該刮擦交替的語言環境;不是這種情況。很明顯,從上面的響應中可以看到備用語言環境,但它不處理它們。

所以,這裏是我專門詢問了Facebook刮刀來處理我的網頁EN法語

curl -d "id=https://apps.facebook.com/everydaybarilla/&scrape=true&locale=fr_CA" https://graph.facebook.com 

這一次,我正確地看到從刮刀兩個請求到我的服務器。第二個請求將X-Facebook-Locale標頭和fb_locale網址參數都正確設置爲fr_CA。並且POST正確返回法語響應:

{ 
    "url": "http://apps.facebook.com/everydaybarilla/?fb_locale=fr_CA", 
    "type": "website", 
    "title": "Concours Tous les jours, de toutes les fa\u00e7ons de Barilla", 
    "locale": { 
     "locale": "fr_ca", 
     "alternate": [ 
     "en_us", 
     "fr_ca" 
     ] 
    }, 
    "image": [ 
     { 
     "url": "http://everydaybarilla.ssl.spidermarketing.ca/assets/img/thumbnails/5.png" 
     }, 
     { 
     "url": "http://everydaybarilla.ssl.spidermarketing.ca/assets/img/thumbnails/4.png" 
     }, 
     { 
     "url": "http://everydaybarilla.ssl.spidermarketing.ca/assets/img/thumbnails/3.png" 
     }, 
     { 
     "url": "http://everydaybarilla.ssl.spidermarketing.ca/assets/img/thumbnails/fr-2.png" 
     }, 
     { 
     "url": "http://everydaybarilla.ssl.spidermarketing.ca/assets/img/thumbnails/fr-1.png" 
     } 
    ], 
    "description": "Un heureux gagnant et son invit\u00e9(e) partiront \u00e0 destination de l\u2019Italie pour une aventure culinaire de 8 jours pour 2 personnes (valeur au d\u00e9tail approximative de 15 000 $)!", 
    "site_name": "Barilla\u2019s Every Day, Every Way Contest", 
    "updated_time": "2012-04-16T18:11:27+0000", 
    "id": "10150594698421968", 
    "application": { 
     "id": "317271281656427", 
     "name": "Barilla\u2019s Every Day, Every Way Contest", 
     "url": "http://www.facebook.com/apps/application.php?id=317271281656427" 
    } 
} 

成功!

當然,經過所有這些努力,當我去法國的Facebook.com併發布這個網址時,狀態框被填入......與英文數據。看起來Facebook自己的界面沒有配置爲請求正確的區域設置。

所以,即使所有這些努力,似乎沒有任何成就(翻譯我的字符串通過Facebook翻譯應用程序也無法正常工作,所以我想我不應該感到驚訝)。

不過,它確實回答了這個問題。也許其他人可以確定爲什麼Facebook.com界面似乎不要求正確的區域設置。

+1

我的問題與你基本相同,但從未讓Facebook在其他語言環境中搜索en_US。我昨天在斯德哥爾摩的Facebook Developer Garage會見了一位Facebook開發人員。我解釋了這個問題,他的回答是:你需要知道的一切都在文檔頁面。你不需要做任何魔術。他試圖在兩個月前爲OG對象添加多語言支持並獲得成功。他唯一的建議是再次嘗試並報告所有錯誤。他們將這些錯誤報告響應相當快,但我沒有時間和精力來報告更新了文檔的錯誤:( –

+2

,使您的重要一點更清晰一點 –

+3

您好,我有同樣的問題,因爲你。**畢竟這些努力,當我去法國的Facebook.com併發布這個網址,狀態框是填充...與英文數據。**你有沒有發現任何提示破解它? – user2686101

1

我有相同的問題,直到最後得到它的工作,通過設置所有的元標記(og:locale和og:locale:alternate)的區域值小寫。

檢查了這一點: http://developers.facebook.com/bugs/309825175774568?browse=search_5033cc14f42016961266549

這樣做,並重新刮,之後前往Facebook和改變語言設置來支持的語言環境會正確發送X-Facebook的語言環境和fb_locale,並觸發所需我的結果。

btw:將用戶語言環境設置爲未列在og:locale:alternate中的用戶語言環境不會發送標頭/獲取參數。

3

Facebook的現場處理是完全不一致

現在幾個星期開放圖形語言環境摔跤後,我好不容易纔發佈基於用戶的語言環境改變的文本內容。儘管如此,我仍然無法獲得預期的結果。

這裏是我的意見:

OG:語言環境中調試器顯示在默認情況下,我的實際Facebook的語言環境。點擊og:locale:alternate links會更改對象屬性以及界面語言。我認爲這是設計。

沒有將fb_locale附加到輸入URL的「Raw Open Graph Document Information」部分顯示了默認數據。如果fb_locale設置爲混合大小,則根據參數更改「原始打開圖形文檔信息」部分。 「對象屬性」部分仍然顯示基於實際/所選語言環境的數據。 如果fb_locale是小寫字母,它會返回'錯誤解析輸入URL,沒有數據被刮掉'。

對於附加到調試器(不是輸入)URL的'locale'參數也是如此。如果採用混合格式,則會更改「對象屬性」部分和界面語言。然而,它什麼也不做,當我通過它在小寫(返回默認/當前的語言環境)

出人意料的是,圖形API是負作用:

  1. 當我請求與PHP SDK重新刮

    1. 僅當區域設置以小寫形式傳遞時更新內容,但在此情況下爲(!),返回的響應沒有locale:locale參數,如果X-Facebook語言環境標頭或fb_locale參數在場。

      響應中的所有數據都是默認的語言環境。但是,根據我的Facebook語言環境設置更新了牆柱並正確顯示了文字。

    2. 如果語言環境以混合大小寫格式傳遞 - 如定義的文檔 - 請求返回「不支持的post請求」錯誤。 當使用php CURL函數而不是Facebook php SDK的api調用時,en_GB是一個例外,其中響應也包含fb_locale和本地化(英文)內容,但對象屬性/牆壁帖子未更新,對於en_GB 。對於其他語言,返回「不支持的發佈請求」。

  2. 當我使用對象的ID(在調試器頁面的底部發現了ID - 從「link_stat」表查詢「comments_fbid」字段),而不是網址:

    1. 與混合大小寫區域設置,響應包含正確的文本和fb_locale所有語言環境,但沒有更新。 og:updated_time在調試器中保持不變,但它的更新編號爲https://graph.facebook.com/[object ID]

    2. 帶小寫的區域設置,結果與1.1中描述的相同。

  3. 在曲線圖的查詢,該行爲再次是上述的相反: 當我嘗試查詢https://graph.facebook.com/[object ID]語言環境= EN_GB, 與大小寫混合區域設置,它返回預期的結果, 與小寫區域設置,它返回沒有區域設置(只有區域設置:備用)標籤集的默認版本。:-o

是否有可能在圖形API端點和調試對待語言環境不同,因此無法獲得來自同一個效應初探?

BTW用小寫的語言環境,我好不容易纔具有本地化的飼料,其中的文本是基於UER的語言環境中顯示的帖子。

現在我的問題是,所有的鏈接都指向同一個規範的網址沒有任何具體的語言環境的信息,因爲 - 因爲薩爾瓦多說-doing做會造成不同的對象。請參閱我的文章在這裏: how to get the locale of a facebook user clicking on a localised object's link?