Подтвердить что ты не робот

Метатеги Facebook соскоблили с неработающим языком

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

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

Кто-нибудь, имеющий такую ​​же проблему?

4b9b3361

Ответ 1

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

Вот мои локальные теги 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"
   }
}

Успех!

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

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

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

Ответ 2

Обработка локали в Facebook полностью противоречива

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

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

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

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

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

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

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

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

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

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

  • Когда я использую идентификатор объекта (идентификатор, найденный в нижней части страницы отладчика, путем запроса поля "comments_fbid" из таблицы "link_stat" ) вместо URL-адреса:

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

    • с нижестоящими локалями, результат будет таким же, как описано в 1.1.

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

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

btw с нижестоящими локалями, мне удалось локализовать сообщения в фиде, где текст отображается на основе языкового стандарта uer.

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

Ответ 3

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

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

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

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

Ответ 4

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

Ответ 5

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

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

Одним из решений для размещения сообщений в userlanguage является:

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

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

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


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