Open Graphはアクション/オブジェクトの国際化(i18n)に対応しているため、多言語対応が可能です。この国際化フローは、こちらで紹介されているアプリケーション国際化と同じフローです。アプリケーション上の文字列がFacebookの翻訳システム上に保存されると、開発者自身がそれを翻訳したり、アプリケーションのユーザコミュニティに翻訳させることができます。その際、ユーザはTranslationsを用いることになります。翻訳が完了すると、他の翻訳済み文字列同様、承認のプロセスを通らなくてはなりません(言語の管理者もしくはアプリケーションオーナーの承認)。
Objects
Open Graphオブジェクトは、 一連のメタタグの値によって注釈のついたウェブページです。オブジェクト上の各プロパティはtitle, descriptionとその他のカスタムプロパティによって成り立ちます。オブジェクトとユーザはアクションを介して繋がり、そのつながりを持つとき、 オブジェクトはタイムライン,ニュースフィード,リアルタイムフィードに足されます。オブジェクトのプロパティ値を他言語で持つことも可能です。オブジェ クトが他言語でスクレイピングされるようにするには、以下のいずれかの条件を満たしてください。
- localeパラメータの付いたオブジェクトURLをGraph API呼び出しに使う
- og:locale:alternateメタタグの配列を埋め込んで、どのロケールをサポートしているか指定する
Open
GraphオブジェクトのクローラーはURLにfb_localeパラメータを付加(例:?locale=en_US)し、X-Facebook-
Localeヘッダも渡します。アプリケーションがその言語に対応している場合、そのヘッダ情報に合ったタグ/文字列を返してください。Facebook
はその文字列のハッシュ値をその言語に紐づけて保存します。
- 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>
Facebookがこのオブジェクトをクロールするとき(オブジェクトの生成についてはこちらを 参照)、X-Facebook-LocaleというHTTPヘッダと、fb_localeというURLパラメータが渡されます。これが、Facebook が期待している言語を知るヒントとなりますので、このパラメータを見て、該当ロケールのOpen Graphメタタグを返してください。該当ロケールのデータがない場合には、og:localeが指定されていないデフォルトの状態を返すか、他のロケー ルのデータを返してください。
ローカライズされたオブジェクトの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")}"
上記のテンプレートは以下のような形式へと変換されます。
- Listened once
- 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ヘッダで指定されるロケールのデータを持っていない場合は?
以下のうち一方で対応できます。- og:localeプロパティを指定しない通常の状態を返す
- 他のロケールで返す。常にog:localeを指定する前提の場合、提供されるロケール群のうち、ユーザに最も適切と思われるロケールで提供します。
追加/変更した文字列が反映されない場合は?
アプリケーション上の文字列を静的に取得しているので、アプリケーション上の文字列が変更された場合には、translation dashboardのDelete and re-import all stringsリンクをクリックしなくてはなりません。
注
意:アプリケーションから取得した(もしくはFBMLからアップロードされた)文字列を全て削除して再取り込みします。FBMLのサポートは終わっていま
すので、FBMLからのインポートはされません。この作業では既に翻訳された翻訳は削除されませんので、同一文字列で同一説明文を持つ文言の翻訳は変更さ
れません。