どちらを使用するかによって、DBまたはASCIIファイルを使用できます。DBを使用する場合は、次の列を持つテーブルを作成できます。
country_code :言語の国コード(つまり、英語の場合はUS)
Definition_name:定義またはメッセージの名前(*つまり、dbアクションの一般的なエラーメッセージの場合はdb_error_msg *)
定義値 :定義の値(つまり、データの保存中にエラーが発生しました)
各レコードが定義になります。
ユーザーが選択した言語に応じて、アプリはデータベースをフィルタリングし、必要なすべての定義のクエリを取得します。私は通常、そのクエリを使用して、次のようなセッション変数構造を設定します。
<cfif IsDefined("session.language") IS FALSE>
<cfquery name="getDefinition" datasource="dsn">
SELECT * FROM tbl_definitions WHERE country_code = "US"
</cfquery>
<cfset session.language = structnew()>
<cfoutput query="getDefinitions">
<cfset session.language["#definition_name#"] = "#definition_value#">
</cfoutput>
</cfif>
コードでは、単に次を使用します。
<cfoutput>
<h2>#session.language.db_error_msg#</h2>
</cfoutput>
そして、私は現在の言語に合ったメッセージを受け取ります。マスター定義データベースを使用して、さまざまなWebサイトで使用することもできます。
同じソリューションをさまざまな構成ファイル(US.cfg、EN.cfg、ES.cfgなど)で使用して、簡単な方法で定義を設定してリストを取得できます。私は通常、次のシステムを使用します。各行のdefinition_name =definition_value
db_error_msg = Sorry, an error occured saving your data
db_success_msg = Record saved
次に、現在の言語構成ファイル(つまり、英語の場合はUS.cfg、スペイン語の場合はES.cfg)を読み取り、同じ結果を取得します。
<cfif IsDefined("session.language") IS FALSE>
<cffile action="read" file="#path#\US.cfg" variable="definitions">
<cfset session.language = structnew()>
<cfloop index="i" list="#definitions#" delimiters="#chr(10)#">
<cfset definition_name = ListGetAt(i,1,"=")>
<cfset definition_value = ListGetAt(i,2,"=")>
<cfoutput>
<cfset session.language["#definition_name#"] = "#definition_value#">
</cfoutput>
<cfloop>
</cfif>
これは、セッションの開始時に(必要な言語がわかっている場合)実行でき、どちらの方法でも、定義したユーザーセッション期間中、アプリケーション内のあらゆる場所で定義を利用できます。ボタン、メッセージ、テーブルヘッダーなどの定義を使用して、ローカライズされたテンプレートを作成したり、インライン翻訳を使用したりすることなく、非常に高速な方法で多言語UIを作成できます。
これがお役に立てば幸いです。