Open Graphはアクション/オブジェクトの国際化(i18n)に対応しているため、多言語対応が可能です。この国際化フローは、こちらで紹介されているアプリケーション国際化と同じフローです。アプリケーション上の文字列がFacebookの翻訳システム上に保存されると、開発者自身がそれを翻訳したり、アプリケーションのユーザコミュニティに翻訳させることができます。その際、ユーザはTranslationsを用いることになります。翻訳が完了すると、他の翻訳済み文字列同様、承認のプロセスを通らなくてはなりません(言語の管理者もしくはアプリケーションオーナーの承認)。


Objects

Open Graphオブジェクトは、 一連のメタタグの値によって注釈のついたウェブページです。オブジェクト上の各プロパティはtitle, descriptionとその他のカスタムプロパティによって成り立ちます。オブジェクトとユーザはアクションを介して繋がり、そのつながりを持つとき、 オブジェクトはタイムライン,ニュースフィード,リアルタイムフィードに足されます。オブジェクトのプロパティ値を他言語で持つことも可能です。オブジェ クトが他言語でスクレイピングされるようにするには、以下のいずれかの条件を満たしてください。

  1. localeパラメータの付いたオブジェクトURLをGraph API呼び出しに使う
  2. og:locale:alternateメタタグの配列を埋め込んで、どのロケールをサポートしているか指定する

Open GraphオブジェクトのクローラーはURLにfb_localeパラメータを付加(例:?locale=en_US)し、X-Facebook- Localeヘッダも渡します。アプリケーションがその言語に対応している場合、そのヘッダ情報に合ったタグ/文字列を返してください。Facebook はその文字列のハッシュ値をその言語に紐づけて保存します。

  1. og:localeメタタグをウェブページに埋め込んでおきます。これは必須プロパティではありませんが、こちらで定義されているロケールを指定することが可能です。オブジェクトが該当言語をサポートしているのを保証するため、Graph API呼び出し時にlocaleパラメータをobject scrape apiに渡すか、複数のog:locale:alternateタグを指定してください。複数の言語に対応している場合には複数のog:locale:alternateを指定できます。

例:

フランス語とスペイン語をサポートするオブジェクトの場合。

<html>
<head>
    <meta property="og:locale:alternate" content="fr_FR" />
    <meta property="og:locale:alternate" content="es_ES" />
    ...
</head>
    ...
</html> 
  1. Facebookがこのオブジェクトをクロールするとき(オブジェクトの生成についてはこちらを 参照)、X-Facebook-LocaleというHTTPヘッダと、fb_localeというURLパラメータが渡されます。これが、Facebook が期待している言語を知るヒントとなりますので、このパラメータを見て、該当ロケールのOpen Graphメタタグを返してください。該当ロケールのデータがない場合には、og:localeが指定されていないデフォルトの状態を返すか、他のロケー ルのデータを返してください。

  2. ローカライズされたオブジェクトのog:urlとog:typeは同じままで、ローカライズされた他メタタグは異なるものとなります。

アプリケーション側は、Graph APIのエンドポイントに対してHTTP POSTメソッドでlocaleアトリビュートを渡して、再クロールをリクエストすることができます。

例:

英語でのクロール。

POST https://graph.facebook.com?id=http://example.com/movie/inception&scrape=true&locale=en_US

フランス語でのクロール。

POST https://graph.facebook.com?id=http://example.com/movie/inception&scrape=true&locale=fr_FR

オブジェクトのプロパティが変更される場合、もしくは新しい言語がサポートされる場合は、各言語でGraph APIを呼び出してFacebook上のオブジェクト定義を更新すべきです。


Actions

アクションタイプは即座にFacebookによって翻訳されます。アプリケーションの翻訳設定時に、こちらを参考にしてください。

ア クションのプロパティは翻訳されません。例えば、review_textというカスタムプロパティを持つreviewアクションがあって、ユーザが英語で review_textを投稿したとすると、フランス語での閲覧者はreview_textを英語のまま見ることになります。


News Feed and Ticker

アプリケーションからの投稿も即座に翻訳されます。詳細はこちらのガイドをご覧ください。

各 フィード投稿にはユーザ名/オブジェクトタイトルのプレースホルダを含むテンプレートがあります。Facebookが性別の区別(男性名詞/女性名詞)を サポートしているロケールであれば、動詞の接続が正しくなるように適切な語が提供されます。前置詞(例: "on Netflix", "on Climbon"など)はフィード投稿の翻訳に含まれます。以下の例をご覧ください。

{subject} watched {object} on Netflix
{subject} watched {object} and 3 other movies on Netflix

subject にはユーザ名が、obujectにはオブジェクトのタイトルが入り、これらはオブジェクトを所有/投稿するアプリケーションで翻訳可能です。タイムライン 上で要約されるwatchedアクションとmoviesオブジェクトは、Open Graph Dev Toolで開発者によって提供されることに気をつけてください。


Aggregations

要約の構成要素の中にはFacebookによって翻訳されるものがあり、他のものはアプリケーションによって翻訳されます。

一般的にはオブジェクトはアプリケーションによって翻訳され、アクションに紐づく文字列はFacebookによって翻訳されますが、要約のタイトルとキャプションは通常のFacebook国際化手順に則って翻訳されます。オブジェクトのタイトルと説明文への言及箇所はアプリケーション側で翻訳されます。


Pluralization

テンプレートの文字列は複数形もサポートしていて、開発者は以下のように数値を含む文を翻訳対象にできます。

"Listened once"もしくは、"Listened 57 times"。この文は以下のテンプレートによって実現できます。

"Listened {count | pluralize("once", "%d times")}"

上記のテンプレートは以下のような形式へと変換されます。

  1. Listened once
  2. Listened {count} times

Best Practices and FAQ

一つの言語しかサポートしてないんですが

Solution 1: og:localeタグを全部消す
Solution 2: 常にog:locale(en_USなど)を指定する
Solution 3: アプリケーションの翻訳ダッシュボードページに行き、サポートされていないロケールを削除する

同一オブジェクトで異なるロケールをサポートしたいです

リクエストを受け取るときに、X-Facebook-Localeヘッダをチェックし、該当ロケール用にローカライズされたOpen Graphデータを返してください。og:localeプロパティを適切に含み、それがデータのロケールと一致するよう確かめてください。

X-Facebook-Localeヘッダで指定されるロケールのデータを持っていない場合は?

以下のうち一方で対応できます。
  1. og:localeプロパティを指定しない通常の状態を返す
  2. 他のロケールで返す。常にog:localeを指定する前提の場合、提供されるロケール群のうち、ユーザに最も適切と思われるロケールで提供します。

追加/変更した文字列が反映されない場合は?

アプリケーション上の文字列を静的に取得しているので、アプリケーション上の文字列が変更された場合には、translation dashboardDelete and re-import all stringsリンクをクリックしなくてはなりません。

注 意:アプリケーションから取得した(もしくはFBMLからアップロードされた)文字列を全て削除して再取り込みします。FBMLのサポートは終わっていま すので、FBMLからのインポートはされません。この作業では既に翻訳された翻訳は削除されませんので、同一文字列で同一説明文を持つ文言の翻訳は変更さ れません。

他言語化のベストプラクティス

ロケールを既に認識している場合は、適切にog:localeプロパティを指定してください。ユーザのロケールが分かっていて、 og:titleなどの他Open Graphプロパティを書き出す場合には、適切にog:localeプロパティも指定するようにします。X-Facebook-Localeヘッダを チェックし、該当ロケールがサポートされている場合、そのロケールのデータを返します。