4Dはテキストやタイトルのローカライズのために、XLIFF標準をサポートします。この技術は4Dアプリケーション内部でも使用され、4D開発者やプラグイン開発者もカスタマイズされたアプリケーションやプラグインで利用できます。
使用する言語に合わせて動的にインターフェース言語が変えられる4Dアプリケーションを設定する原則は以下の通りです。言語により変更されるすべての要素 (テキスト、ラベル、ピクチャー) をファイルとしてアプリケーションの外側、Resourcesフォルダーに格納します。フォームやメニューの中で、ラベルやピクチャーは参照として指定されます。アプリケーションが実行されると、言語コンテキストに応じてこれらの要素は外部から表示すべきリソースを取得します。XLIFF標準はラベルの記述と参照方法を規定します。
注: XLIFF ファイルに保存されている文字列は Get localized string コマンドを使って直接読み込むことができます。
フォームエディター内ではスタティックエリアを編集モードにするか、オブジェクトメニューからフォーマット表示または名前表示を選択すると、実際の内容を見ることができます。:
互換性に関する注記: XLIFFの他に、4Dは現時点で以前のシステムであるSTR#リソース参照もサポートしています。しかしこのシステムは廃止予定です。両方の方法を同時に使用することができます。今のうちにXLIFFを使用した方法に変更してください。
XLIFF (XML Localization Interchange File Format) はローカライズ処理のための標準です。XMLを使用して翻訳元テキストと翻訳済みテキストの対応を記述します。
実際XLIFF標準はリソースベースのローカライズシステムに代わる新しい標準です。このファイルを管理するためのツールがいくつか存在します。
XLIFF標準に関する詳細は公式XLIFF 1.1仕様書を参照してください:
http://www.oasis-open.org/committees/xliff/documents/xliff-specification.htm
警告: XLIFF標準は大文字/小文字を区別します。
XLIFF 文字列を 4D からコールする方法は二つあります:
Get localized string コマンドを使えばデータベースのどこからでも、特定の文字列について、アプリケーションで選択中の言語への翻訳にアクセスすることができます。現在の言語は Get database localization コマンドで確認することができます。
互換性についての注記: "リソース" テーマの Get indexed string と STRING LIST TO ARRAY コマンドもXLIFF ドキュメントをサポートしていますが 、これらのコマンドの使用は現在では推奨されておらず、互換性のために維持されるにとどまります。
4Dでは以下の場所で自動のXLIFF参照を使用できます:
- フォームエディターのプロパティリストの“オブジェクト名”フィールド
- エクスプローラーからアクセスできるフォームプロパティダイアログボックスの“ウィンドウタイトル”フィールド
- ボタンやチェックボックスタイトル、スタティックテキストなど
- メニューエディター (ObjectName シンタックスを除く、後述)
- ヘルプTipsエディター (ObjectName シンタックスを除く、後述)
注:
- XLIFF参照が認識されるためには、テキストの先頭に記述されなければなりません。
- ヘルプTipエディターにXLIFF参照を表示することはできません。XLIFFに基づくヘルプTipを使用するには、プロパティリストのヘルプメッセージに直接XLIFF参照を入力します。
4Dでは以下のシンタックスを使用して、自動のXLIFF参照を活用することができます:
- :15115,3 シンタックス
XLIFFファイルでこのシンタックスを使用する場合、最初の値 (この例では15115) はgroup要素のid属性値に対応します。.
二つ目の値 (この例では3) はtrans-unit要素のid属性値に対応します。
互換性に関する注記: このシンタックスは前世代のSTR#リソースに基づくものと同じです。このとき“:xxxx,yyy”においてxxxxはSTR#リソース番号でありyyyは要素番号でした。例えば“:15115,3”はSTR#リソース15115の3番目の文字列を使用することを意味しました。このシンタックスがサポートされるため、変換されたデータベースにおいてリソースベースのシステムが動作し、徐々にXLIFFベースのシステムに置き換えられます。4DはまずロードされたXLIFFファイルの中から15115,3に対応するリソースを探します。もし見つからなければ開かれたリソースファイルの中で対応するリソースを探します。このメカニズムを使用すれば既存のSTR#リソースに基づくシステムにXLIFFベースのシステムを統合することが可能です。両方のシステムを同時に利用できます。いずれの場合もロードされたXLIFFファイルがリソースファイルよりも優先されます。
- :xliff:OKButton シンタックス
この新しいシンタックスはロードされたXLIFFファイルでのみ利用できます。この場合参照された名前 (この例ではOKButton) はtrans-unit要素のresname属性に対応します。
データベース中で異なるシンタックスを使用する場合、XLIFFファイル中で対応するリソースを検索する優先度は以下の通りです:
1. “:15115,3” シンタックス
2. “:xliff:OKButton” シンタックス
3. “MyTitle” シンタックス
XLIFF参照またはカレントの言語に従い翻訳されたタイトルをフォームエディターで表示するには、オブジェクトメニューから名前表示またはリソース表示を選択します。詳細はスタティックテキスト中で参照を使用するを参照してください。
アプリケーションのローカライズのためにXLIFFアーキテクチャーを使用する場合、有効なXLIFFファイルを必要なだけ作成し、データベースのResourcesフォルダーにコピーします。
データベースのResourcesフォルダーに関する詳細はリソースフォルダの管理を参照してください。
使用するパスは以下の通りです:
- Windows:
MyDatabase\Resources\{Lang}.lproj\{MyJALoc}.xlf
- Mac OS:
MyPackage:Resources:{Lang}.lproj:{MyJALoc}.xlf
上記において:
- MyDatabase はデータベースファイルを格納したフォルダーで、MyPackage はMac OSのデータベースパッケージです。
- {Lang}.lproj には Lang 言語用のXLIFFファイルを配置します。Lang 部分は後述の国際標準に従った名称を使用しなければなりません。例えば日本語の場合、フォルダー名は ja.lprojです。
4Dはデータベースのカレント言語に対応したXLIFFファイルを自動でロードします。データベースのカレント言語を決定する際、4Dは以下の順番でデータベースのResourcesフォルダー内を検索します:
- システム言語 (Mac OSでは環境設定で言語の検索順を設定できます。4Dはこの設定を使用します。)
- 4Dアプリケーションの言語
- 英語
- ここまでで検索できなかった場合、Resourcesフォルダーで最初に見つかった言語がロードされます。
Get database localizationコマンドを使用するとデータベースに指定されたカレント言語を知ることができます。
言語のバリエーションが使用されていて、XLIFFファイルでそれが利用できない場合、それにもっとも近い言語が使用されます。
XLIFFファイルの名前 (例では"MyJALoc"部分) は自由に決定できます。ただし拡張子を“.xlf.”にします。同じ言語フォルダー内に複数のXLIFFファイルを配置できます。それらはファイル名の順番にロードされます。
“.lproj”フォルダーの名前は後述する標準に従わなければなりません。4Dは標準に従ったフォルダーを以下の順番で検索対象とします。:
- 言語-地域コード
この組み合わせでは言語コード (ISO639-1) + ハイフン + 国コード (ISO3166) または 4文字のスクリプトコー (ISO15924) となります。
たとえばカナダフランス言語圏では“fr-ca” (fr-ca.lproj) となります。 - ISO639-1
この標準では各言語を2文字で表します。例えば日本語は“ja” (ja.lproj) です。
参照: http://www.loc.gov/standards/iso639-2/php/English_list.php - レガシ名
この用法では言語名を英語で表記します。例えば日本語の場合“japanese” (japanese.lproj) です。
注: 最初の二つの記法はMac OS 10.4以降でサポートされています。それより前のMac OSではレガシ名のみがサポートされています。
4Dがサポートする言語コードの要約はで提供されます。
注: 同じ原則がXLIFFファイル中の“target-language”タグにも適用されます。このタグの値を注意深く設定しなければなりません。ファイルが“fr-ca.lproj”フォルダー内に存在するとしても、“target-language=fr”と記述されていた場合、そのファイルは“fr”として扱われます。
アプリケーションをローカライズする際、起動時にロードされたXLIFFファイルは動的に再ロードされます。つまりXLIFFファイルを編集すると、その変更は即座に4D内に反映されます。このリロードは4Dがアプリケーションの最前面になったときに、XLIFFファイルの更新日時が前回のロード時と異なる場合に発生します。カレントフォームも同時に再ロードされます。
4DがサポートするXLIFFファイルの言語コードは以下の通りです。
| 言語 | ISO639-1 | “レガシ” | ISO3166 / ISO15924 |
| AFRIKAANS | af | afrikaans |
| ALBANIAN | sq | albanian |
| ARABIC_SAUDI_ARABIA | ar | arabic | sa |
| ARABIC_IRAQ | ar | arabic | iq |
| ARABIC_EGYPT | ar | arabic | eg |
| ARABIC_LIBYA | ar | arabic | ly |
| ARABIC_ALGERIA | ar | arabic | dz |
| ARABIC_MOROCCO | ar | arabic | ma |
| ARABIC_TUNISIA | ar | arabic | tn |
| ARABIC_OMAN | ar | arabic | om |
| ARABIC_YEMEN | ar | arabic | ye |
| ARABIC_SYRIA | ar | arabic | sy |
| ARABIC_JORDAN | ar | arabic | jo |
| ARABIC_LEBANON | ar | arabic | lb |
| ARABIC_KUWAIT | ar | arabic | kw |
| ARABIC_UAE | ar | arabic | ae |
| ARABIC_BAHRAIN | ar | arabic | bh |
| ARABIC_QATAR | ar | arabic | qa |
| BASQUE | eu | basque |
| BELARUSIAN | be | belarusian |
| BULGARIAN | bg | bulgarian |
| CATALAN | ca | catalan |
| CHINESE_TRADITIONAL | zh | chinese | hant |
| CHINESE_SIMPLIFIED | zh | chinese | hans |
| CHINESE_HONGKONG | zh | chinese | hk |
| CHINESE_SINGAPORE | zh | chinese | sg |
| CROATIAN | hr | croatian |
| CZECH | cs | czech |
| DANISH | da | danish |
| DUTCH | nl | dutch |
| DUTCH_BELGIAN | nl | dutch | be |
| ENGLISH_US | en | english |
| ENGLISH_UK | en | english | gb |
| ENGLISH_AUSTRALIA | en | english | au |
| ENGLISH_CANADA | en | english | ca |
| ENGLISH_NEWZEALAND | en | english | nz |
| ENGLISH_EIRE | en | english | ie |
| ENGLISH_SOUTH_AFRICA | en | english | za |
| ENGLISH_JAMAICA | en | english | jm |
| ENGLISH_BELIZE | en | english | bz |
| ENGLISH_TRINIDAD | en | english | tt |
| ESTONIAN | et | estonian |
| FAEROESE | fo | faorese |
| FARSI | fa | persian |
| FINNISH | fi | finnish |
| FRENCH | fr | french |
| FRENCH_BELGIAN | fr | french | be |
| FRENCH_CANADIAN | fr | french | ca |
| FRENCH_SWISS | fr | french | ch |
| FRENCH_LUXEMBOURG | fr | french | lu |
| GERMAN | de | german |
| GERMAN_SWISS | de | german | ch |
| GERMAN_AUSTRIAN | de | german | at |
| GERMAN_LUXEMBOURG | de | german | lu |
| GERMAN_LIECHTENSTEIN | de | german | li |
| GREEK | el | greek |
| HEBREW | he | hebrew |
| HUNGARIAN | hu | hungarian |
| ICELANDIC | is | iceland |
| INDONESIAN | id | indonesian |
| ITALIAN | it | italian |
| ITALIAN_SWISS | it | italian | ch |
| JAPANESE | ja | japanese |
| KOREAN_WANSUNG | ko | korean |
| KOREAN_JOHAB | ko | korean |
| LATVIAN | lv | latvian |
| LITHUANIAN | lt | lithuanian |
| NORWEGIAN | no | norwegian |
| NORWEGIAN_NYNORSK | nn | nynorsk | no |
| POLISH | pl | polish |
| PORTUGUESE | pt | portuguese |
| PORTUGUESE_BRAZILIAN | pt | portuguese | br |
| ROMANIAN | ro | romanian |
| RUSSIAN | ru | russian |
| SERBIAN_LATIN | sr | serbian | latn |
| SERBIAN_CYRILLIC | sr | serbian | cyrl |
| SLOVAK | sk | slovak |
| SLOVENIAN | sl | slovenian |
| SPANISH_CASTILLAN | es | spanish |
| SPANISH_MEXICAN | es | spanish | mx |
| SPANISH_MODERN | es | spanish |
| SPANISH_GUATEMALA | es | spanish | gt |
| SPANISH_COSTA_RICA | es | spanish | cr |
| SPANISH_PANAMA | es | spanish | pa |
| SPANISH_DOMINICAN_REPUBLIC | es | spanish | do |
| SPANISH_VENEZUELA | es | spanish | ve |
| SPANISH_COLOMBIA | es | spanish | co |
| SPANISH_PERU | es | spanish | pe |
| SPANISH_ARGENTINA | es | spanish | ar |
| SPANISH_ECUADOR | es | spanish | ec |
| SPANISH_CHILE | es | spanish | cl |
| SPANISH_URUGUAY | es | spanish | uy |
| SPANISH_PARAGUAY | es | spanish | py |
| SPANISH_BOLIVIA | es | spanish | bo |
| SPANISH_EL_SALVADOR | es | spanish | sv |
| SPANISH_HONDURAS | es | spanish | hn |
| SPANISH_NICARAGUA | es | spanish | ni |
| SPANISH_PUERTO_RICO | es | spanish | pr |
| SWEDISH | sv | swedish |
| SWEDISH_FINLAND | sv | swedish | fi |
| THAI | th | thai |
| TURKISH | tr | turkish |
| UKRAINIAN | uk | ukrainian |
| VIETNAMESE | vi | vietnamese |