您可以使用 DB 或 ascii 文件,这取决于您喜欢哪个。如果你使用数据库,你可以创建一个包含以下列的表:
country_code :语言的国家代码(即 US 为英语)
definition_name:定义或消息的名称(*ie db_error_msg 用于 db 操作的通用错误消息*)
定义值 :定义的值(即抱歉,保存数据时出错)
每条记录都是一个定义。
根据用户选择的语言,您的应用程序将过滤数据库,您将获得所需的所有定义的查询。我通常使用该查询来设置会话变量结构,例如:
<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>
我会得到当前语言的正确信息。您还可以使用不同网站使用的主定义数据库。
相同的解决方案可用于不同的配置文件(即 US.cfg、EN.cfg、ES.cfg),您可以在其中以简单的方式设置定义以获取列表。我通常使用以下系统: 每行的定义名称 = 定义值
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>
这可以在会话开始时完成(如果您知道所需的语言),并且在您定义的用户会话持续时间内,您的定义将在应用程序内的任何地方都可用。您可以使用按钮、消息、表格标题等的定义以非常快速的方式创建多语言用户界面,而无需创建本地化模板或使用内联翻译。
我希望这能帮到您。