Water for asp.net 之八:多语言的实现

water-logo 

source code address:water source

demo address:water demo

blogs address:water bolgs

water中多语言的实现可通过配置文件或数据库来实现。

下图是一个配置文件的实现:

 

通过定义各语言的prompt文件即可实现多语言。

定义好这些多语言文件后我们还需要在web.config中配置,如:

代码
        <!--Prompt文件或table-->
        
<add key="FilePrompt" value="/prompts/prompt.xml"/>
        
<!--<add key="TablePrompt" value="sys_prompt"/>-->
        
<!--Prompt缓存文件依赖,可以是是依赖多个文件,文件间用逗号隔开,如:a.txt,b,txt-->
        
<add key="FileDependencyPrompt" value="/prompts/a.txt"/>

 我们稍后再介绍这个配置,先看一下prompt文件的格式:

代码
 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <prompts>
 3   <prompt field="score.title" desc="学生成绩(行转列)"/>
 4   <prompt field="employees.title" desc="员工基本信息"/>
 5   
 6     <entity name="sys">
 7       <prompt field="save" desc="保存"/>
 8         <prompt field="update" desc="修改"/>
 9         <prompt field="delete" desc="删除"/>
10         <prompt field="add" desc="添加"/>
11         <prompt field="select" desc="查询"/>
12     <prompt field="reset" desc="重置"/>
13     <prompt field="edit" desc="编辑"/>
14     <prompt field="new" desc="新建"/>
15     <prompt field="cancel" desc="取消"/>
16     <prompt field="query" desc="查询"/>
17     <prompt field="insert" desc="添加"/>
18     </entity>
19 
20   <entity name="menu">
21     <prompt field="menutitle" desc="菜单"/>
22     <prompt field="menumaintain" desc="菜单维护"/>
23     <prompt field="menuid" desc="ID"/>
24     <prompt field="text" desc="菜单"/>
25     <prompt field="navigateUrl" desc="导航URL"/>
26     <prompt field="imageUrl" desc="图像URL"/>
27     <prompt field="toolTip" desc="提示"/>
28     <prompt field="imageToolTip" desc="图像提示"/>
29     <prompt field="parentId" desc="上级菜单"/>
30     <prompt field="target" desc="目标"/>
31     <prompt field="ordernum" desc="排序"/>
32   </entity>
33 
34 
35   <entity name="employees">
36     <prompt field="id" desc="员工ID"/>
37     <prompt field="firstName" desc="第一名字"/>
38     <prompt field="lastName" desc="第二名字"/>
39     <prompt field="email" desc="Email"/>
40     <prompt field="jobId" desc="岗位ID"/>
41     <prompt field="salary" desc="薪水"/>
42     <prompt field="hireDate" desc="雇佣日期"/>
43     <prompt field="departmentId" desc="部门ID"/>
44   </entity>
45   
46   <entity name="jobs">
47     <prompt field="jobId" desc="岗位ID"/>
48     <prompt field="title" desc="岗位名称"/>
49     <prompt field="minSalary" desc="最小薪水"/>
50     <prompt field="maxSalary" desc="最大薪水"/>
51   </entity>
52   <entity name="departments">
53     <prompt field="departmentId" desc="部门ID"/>
54     <prompt field="departmentName" desc="部门名称"/>
55   </entity>
56 
57   <entity name="score">
58     <prompt field="score" desc="成绩"/>
59   </entity>
60   
61   <entity name="student">
62     <prompt field="studentId" desc="学生ID"/>
63     <prompt field="studentname" desc="姓名"/>
64   </entity>
65   
66   <entity name="course">
67     <prompt field="courseid" desc="课程ID"/>
68     <prompt field="coursename" desc="课程"/>
69   </entity>
70   
71 </prompts>

 

 

结构非常简单。实际上我的目的就是想形成一组键值对结构,如:

文件中35行到44行会形成,

key=ZH-CH$employees.id               value=员工ID

key=ZH-CH$employees.firstname        value=第一名在

key=ZH-CH$employees.lastname        value=第二名字

key=ZH-CH$employees.email            value=Email

key=ZH-CH$employees.jobid            value=岗位ID

key=ZH-CH$employees.salary           value=薪水

key=ZH-CH$employees.hiredate         value=雇佣日期

key=ZH-CH$employees.departmentid     value=部门ID 

(ZH-CH是语言信息) 

当然可以用数据库表存储该信息 ,但表的结构第一个字段是key,第二个是语言信息(如:ZH-CN、EN-US),第三个是value。当然web.config中要配置该表,如:

<add key="TablePrompt" value="表名"/> 。

web.config中还有一行:

<add key="FileDependencyPrompt" value="/prompts/a.txt"/>

是用于配置多语言文件的缓存的依赖的,因为,对语言文件是在应用启动的时候加载到内存的,在开发的时候为了测试方便,我添加了这个缓存依赖文件,主要是方便测试,任意改动依赖文件的内容就可以使缓存重新加载。


 

posted on 2010-02-02 10:06  guoqiang.liu  阅读(1636)  评论(6编辑  收藏  举报