Метатеги Facebook, очищенные с помощью локали, не работают - PullRequest
13 голосов
/ 30 сентября 2011

Мой сайт многоязычный, и у меня есть кнопка, похожая на FB.Мне бы хотелось, чтобы подобные сообщения были на разных языках.

Согласно документации Facebook, если я использую метатег og: locale и og: locale: alternate, скребок получит информацию о моем сайте, передав параметр"locale" и заголовок "X-Facebook-Locale", но он не отправляет ни того, ни другого. (https://developers.facebook.com/docs/beta/opengraph/internationalization/). Таким образом, сообщения всегда заканчиваются на en_US.

У кого-то есть такая же проблема?

Ответы [ 5 ]

17 голосов
/ 16 апреля 2012

Я получил это работает. Документация не очень подробная;вот подробности.

Вот мои языковые теги 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" />

ОЧЕНЬ ВАЖНО: Документация создает впечатление, что 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"
   }
}

Скребок правильно возвращает данные для локали по умолчанию, но в соответствии с документацией , похоже, что скребок должен также очищать альтернативные локали;это не вариант.Из приведенного выше ответа видно, что он видит альтернативные локали, но не обрабатывает их.

Итак, вот я специально просил скребок Facebook обработать мою страницу en français :

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

На этот раз я правильно вижу два запроса на мой сервер со скребка.Во втором запросе заголовок X-Facebook-Locale и параметр URL 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"
   }
}

Success!

Конечно, после всех этих усилий, когда я захожу на французский Facebook.com и публикую этот URL, статускоробка заполнена ... с английскими данными.Кажется, что собственные интерфейсы Facebook не настроены для запроса правильного языка.

Так что даже при всех этих усилиях, кажется, ничего не было выполнено (переводы моих строк через приложение перевода Facebook тоже не работают,поэтому я не удивлюсь).

Тем не менее, он действительно отвечает на вопрос.Возможно, кто-то еще может определить, почему интерфейсы Facebook.com не запрашивают правильную локаль.

3 голосов
/ 25 февраля 2013

Обработка языка в Facebook совершенно не соответствует

После недолгой борьбы с открытыми языковыми стандартами мне удалось опубликовать контент с изменяющимися текстами в зависимости от языкового стандарта пользователя. Что касается ссылок, я все еще не могу получить ожидаемые результаты.

Вот мои наблюдения:

og: языковой стандарт в отладчике показывает по умолчанию мой фактический языковой стандарт facebook. Нажатие на ссылки og: locale: alternate изменяет свойства объекта, а также язык интерфейса. Я думаю, что это дизайн.

В разделе «Raw Open Graph Document Information» без добавления fb_locale к входному URL-адресу отображаются данные по умолчанию. Если fb_locale установлен и в смешанном случае, раздел «Информация о необработанном открытом графике документа» изменяется в соответствии с параметром. В разделе «Свойства объекта» все еще отображаются данные, основанные на фактической / выбранной локали. Если fb_locale в нижнем регистре, он возвращает «Ошибка синтаксического анализа входного URL, данные не были удалены».

То же самое верно для параметра 'locale', добавляемого к URL-адресу отладчика (не входного). Если это в смешанном формате, раздел Свойства объекта и язык интерфейса будут изменены. Тем не менее, он ничего не делает, когда я передаю его в нижнем регистре (возвращает значения по умолчанию / текущие локали)

Удивительно, но граф api действует обратно:

  1. когда я запрашиваю повторную очистку с помощью php sdk

    1. содержимое обновляется только в том случае, если языковой стандарт передается в нижнем регистре, но (!) В этом случае возвращаемый ответ не имеет параметра locale: locale, который устанавливается, если используется заголовок языкового стандарта X-Facebook или fb_locale параметр присутствовал.

      Все данные в ответе находятся в локали по умолчанию. Тем не менее, сообщение на стене обновляется, и текст отображается правильно в соответствии с моими настройками локали в Facebook.

    2. если локали передаются в смешанном формате - как определено в документации - запрос возвращает ошибку «неподдерживаемый пост-запрос». При использовании функции php CURL вместо вызова API php SDK Facebook, en_GB является исключением, где ответ содержит также fb_locale и локализованный (английский) контент, но свойства объекта / сообщения на стене не обновляются, как и для en_GB. Для других языков возвращается «Неподдерживаемый почтовый запрос».

  2. Когда я использую идентификатор объекта (идентификатор находится внизу страницы отладчика - путем запроса поля 'comments_fbid' из таблицы 'link_stat') вместо URL:

    1. со смешанными локалями, ответ содержит правильный текст и fb_locale для всех локалей, но ни одна из них не обновляется. og: updated_time не изменяется в отладчике, но обновляется https://graph.facebook.com/[object ID]

    2. со строчными буквами, результат такой же, как описано в 1.1.

  3. В графовых запросах поведение снова противоположно приведенному выше: Когда я пытаюсь запросить https://graph.facebook.com/[object ID]? Locale = en_GB, в смешанном регистре он возвращает ожидаемый результат, в случае строчных локали он возвращает версию по умолчанию без установленных тегов локали (только локаль: альтернатива). : -О

Возможно ли, что конечная точка API api и отладчик по-разному обрабатывают локали, делая невозможным получение одинакового ответа от обоих?

Кстати, с помощью строчных букв, мне удалось локализовать посты в ленте, где текст отображается в зависимости от локали пользователя.

Теперь моя проблема в том, что все ссылки указывают на один и тот же канонический URL-адрес без какой-либо информации о конкретной локали, потому что - как сказал Сальвадор - это приведет к созданию разных объектов. Смотрите мой пост здесь: как получить локаль пользователя Facebook, щелкнув ссылку локализованного объекта?

1 голос
/ 21 августа 2012

У меня были те же проблемы, пока, наконец, он не заработал, установив все значения локали в метатегах (og: locale и og: locale: alternate) в нижнем регистре.

Проверьте это: http://developers.facebook.com/bugs/309825175774568?browse=search_5033cc14f42016961266549

После этого и повторного удаления, переход на Facebook и изменение языковых настроек на поддерживаемый языковой стандарт будет правильно отправлять X-Facebook-Locale и fb_locale и вызывать для меня желаемые результаты.

Кстати: установка пользовательского языкового стандарта на тот, который не указан в og: locale: alternate, не будет отправлять параметр header / get.

0 голосов
/ 11 февраля 2012

У меня такая же проблема.

Кнопка «Лайк» отправляет в Facebook только свой собственный атрибут data-href="www.example.com/yourpage", а не значения мета-тегов og. После этого Fb вставляет мета-теги og на вашу страницу, и из них создает сообщение на стене.
Так что практически сообщение всегда на языке вашей страницы по умолчанию.

Одно из решений для публикации сообщений в userlanguage:

  • Добавить ?lang=userlanguage к URL-адресу данных кнопки «Мне нравится»
  • Дайте вашей странице возможность получать userlanguage и отображать метатеги og: title и og: description в соответствующем переводе. (например, с php $ _GET)

Таким образом, Fb очистит вашу страницу в языке пользователя и создаст сообщение о локали.

К сожалению Fb создает отдельный объект для каждого URL-адреса ?lang=userlanguage1, userlanguage2 ... и каждый объект имеет свой собственный список поклонников.
Поэтому каждый перевод вашей страницы будет иметь своих поклонников.
: - (


Аналогичный вопрос: Открытая локализация графика

0 голосов
/ 14 января 2012

Какой язык вы указали при загрузке 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>
...