生産の方向にあなたを指すことができます。この
希望にエラー引くとキャッシングを提供する必要がありますアスキーファイルは、好きなものに依存します。 uは次の列を持つテーブルを作成することができDBを使用する場合:
COUNTRY_CODE:国コードを言語用(米国つまりを英語ため)
definition_name:定義の名前またはメッセージ(* dbアクションの一般的なエラーメッセージの場合はdb_error_msg)
定義値:定義の値(ieデータを保存中にエラーが発生しました)
各レコードは定義になります。
言語に応じて、ユーザーがアプリを選択するとデータベースがフィルタリングされ、必要なすべての定義のクエリが表示されます。私は単純に使用するコードでは
<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)で使用できます。 (つまり、英語US.cfgは、スペイン語ES.cfg)それから私は、現在の言語設定ファイルを読み込む definition_name = definition_value各行の
db_error_msg = Sorry, an error occured saving your data
db_success_msg = Record saved
と同じ結果を得る
: 私は通常、次のシステムを使用します
<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を非常に高速に作成できます。
私はこれがあなたに役立つことを願っています。
デベロッパーの怠け者を継承したばかりかもしれません。 ( "今すぐ適切な文字列を扱うことができません。最初に動作させてから残りの時間に、文字列を適切なI18nメカニックにリファクタリングしてください。") –
私をl18nで始めるためのリンクがありますか? – frequent
@freqent:一般的なコンテキストではあまりありません。しかし、私はそれがより厄介な(新しいIDを見つける、既存のメッセージが再利用できるかどうかをチェックする...)場合でも、 "DBのすべて"のアプローチはより適切なアプローチだと思います。 –