Facebook's Open Graph Protocol markup allows for defining the current web page's locale, and any alternative locales it's also available in, using a markup like this:
<meta property="og:locale" content="en_GB">
<meta property="og:locale:alternate" content="fr_FR">
<meta property="og:locale:alternate" content="es_ES">
The current page's permalink can be easily deduced (from the URL, Canonical URL meta tag, or og:url
).
But what's the point of including og:locale:alternate
without their respective URLs? How is it at all useful?
It's clearly stated in the article titled "Internationalizing Open Graph Apps" on the official Facebook Developers blog:
Translating Objects
In order to translate Open Graph objects, two things must happen. The developer must specify which locales are supported by the object through Open Graph meta tags, and the app must return the correct strings in the requested locale. For example, if the object can be translated into French and Spanish, the markup that describes this would look like the following:
<html> <head> <meta property="og:locale:alternate" content="fr_FR" /> <meta property="og:locale:alternate" content="es_ES" /> ... </head> ... </html>
When Facebook needs to render an object in one of the specified locales, we will make a request to the object URL with the
fb_locale
URL parameter set, e.g.&fb_locale=es_ES
. The app should then return the object markup in that specified locale. For more details on translating Open Graph objects, please look at the Open Graph I18N doc.You can debug issues with translating objects by adding a
fb_locale
parameter, e.g.fb_locale=es_ES
, to the Debugger and entering your object URL. If you change or add locales for a particular object, you can make Facebook re-scrape your object to pick up the changes by adding ascrape=true
as described in the Objects section in the I18N documentation.