4Dはテキストやタイトルのローカライズのために、XLIFF標準をサポートします。この技術は4Dアプリケーション内部でも使用され、4D開発者やプラグイン開発者もカスタマイズされたアプリケーションやプラグインで利用できます。
使用する言語に合わせて動的にインターフェース言語が変えられる4Dアプリケーションを設定する原則は以下の通りです。言語により変更されるすべての要素 (テキスト、ラベル、ピクチャー) をファイルとしてアプリケーションの外側、Resourcesフォルダーに格納します。フォームやメニューの中で、ラベルやピクチャーは参照として指定されます。アプリケーションが実行されると、言語コンテキストに応じてこれらの要素は外部から表示すべきリソースを取得します。XLIFF標準はラベルの記述と参照方法を規定します。
フォームエディター内ではスタティックエリアを編集モードにするか、オブジェクトメニューからフォーマット表示または名前表示を選択すると、実際の内容を見ることができます。:
互換性に関する注記: 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標準は大文字/小文字を区別します。
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属性に対応します。
- ObjectName シンタックス (プロパティリストの“オブジェクト名”フィールド)
このシンタックスの目的はフォームの翻訳を容易にすることにあります。他のシンタックスと異なり、これはフォームでのみ使用できます。動作の原理はXLIFFファイルのtrans-unit要素を、resname 属性にそれぞれテーブル名とフォーム名を含む2つのgroup要素で挟むことにあります。
- 例 (テーブルフォーム)
[Clients]テーブルの“Form1”フォームにある、オブジェクト名“SaveButton”のボタンタイトルを翻訳するには、XLIFFファイルに以下のように記述します:
<group resname="[Clients]">
<group resname="Form1">
<trans-unit resname="SaveButton">
...
</trans-unit>
</group>
</group>
- 例 (プロジェクトフォーム)
プロジェクトフォームの場合、テーブル名は[ProjectForm]と記述します:
<group resname="[ProjectForm]">
<group resname="Form1">
<trans-unit resname="SaveButton">
...
</trans-unit>
</group>
</group>
データベース中で異なるシンタックスを使用する場合、XLIFFファイル中で対応するリソースを検索する優先度は以下の通りです:
1. “:15115,3” シンタックス
2. “:xliff:OKButton” シンタックス
3. “MyTitle” シンタックス
“Resources”テーマのGet indexed stringとSTRING LIST TO ARRAYコマンドはXLIFFドキュメントを利用できます。
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 |