可在配置文件中做,如language.xml,可保持页面统一
解决方案 »
- 请教一个关于ASP.Net_SessionId的问题
- 做一个aspx页结合jquery做,有必须每个页都建一个ashx文件吗?
- 怎么使用邮件把密码发给用户
- 异常详细信息: System.Data.SqlClient.SqlException: 无法打开登录 'admin' 中请求的数据库。登录失败。
- 如何将页面中的值传到js中
- 日文、阿拉伯文、中文、同时现在在一张网页上,怎么做到?
- 请有经验的写asp.net的程序员给我一些建议
- 请问怎么用户在选择了客户的图片文件后怎么显示在页面上即上传前的预览
- 怎么在a.aspx里的按钮事件中调用b.aspx里的函数???
- 关于水晶报表。1、显示“Base-64 字符串的无效长度”错误。2、“下一页”等图标不能正确显示。Help me!
- mapxtreme2005 for .net"调用的目标发生了异常"该如何解决呢?
- 急求 asp.net 实现 类似qq秀的换装程序代码 小弟不胜感激
楼主一定要看这帖子。里面有我回答的。不看后悔。多国语言版的。 把分都给我吧。这个保证你满意
我给你找找那个转换语言类吧。希望对你有帮助,我要分。多给点language类using System;
using System.Data;
using System.Web;
using System.Collections;
using System.IO;
using System.Web.UI;
using System.Web.UI.WebControls;
using FSSoft.Common;
using FSSoft.Common.IO;
using FSSoft.Common.TextUtil;
namespace FSSoft.Web.UI
{
/// <summary>
/// 多語言操作類。
/// </summary>
public sealed class Language
{
private static readonly string SessionKey=typeof(Language).FullName;
/// <summary>
/// 存储或取得預載入語言信息的相關配置文件的絕對路徑集合。
/// </summary>
public static ArrayList config_Load_Paths=new ArrayList(); private static short sysOnlySingleLanguageKBN_Value=-1;
/// <summary>
/// 配置系統只採用單一語言(默認採用多語言)。
/// </summary>
/// <res>若系統採用多語言則值為-1。</res>
public static short SysOnlySingleLanguageKBN_Value
{
set
{
if(value!=-1)
{
short[] LanguageKBNValues=(short[])Enum.GetValues(typeof(LanguageKBN));
bool legality=false;
foreach(short LanguageKBNValue in LanguageKBNValues)
{
if(LanguageKBNValue==value)
{
legality=true;
break;
}
}
if(!legality)
{
throw new Exception(consts_Web.UI_LANGUAGE_EX_INFO4);
}
}
sysOnlySingleLanguageKBN_Value=value;
}
get
{
return sysOnlySingleLanguageKBN_Value;
}
}
private static DataSet[] ds=null;
private static DataSet DS(string configName)
{
if(ds==null&&config_Load_Paths.Count>0)
{
ds=new DataSet[config_Load_Paths.Count];
try
{
for(int i=0;i<config_Load_Paths.Count;i++)
{
ds[i]=XMLUtil.InitXml((string)config_Load_Paths[i]);
}
}
catch(Exception e)
{
ds=null;
throw e;
}
}
foreach(DataSet getds in ds)
{
if(getds.DataSetName==configName)
{
return getds;
}
}
throw new Exception(string.Format(consts_Web.UI_LANGUAGE_EX_INFO3,configName));
}
/// <summary>
/// 设置或取得用户当前语言设置。
/// </summary>
public static LanguageKBN Current
{
set
{
HttpContext.Current.Session.Add(SessionKey,value);
}
get
{
if(sysOnlySingleLanguageKBN_Value!=-1)
return (LanguageKBN)Enum.Parse(typeof(LanguageKBN),sysOnlySingleLanguageKBN_Value.ToString());
if(HttpContext.Current.Session[SessionKey]==null)
{
string CurrentLanguage=HttpContext.Current.Request.UserLanguages[0];
switch(CurrentLanguage.Substring(0,2))
{
case "zh":
if(CurrentLanguage=="zh-cn")
return LanguageKBN.CHS;
else
return LanguageKBN.CHT;
case "ja":
return LanguageKBN.JP;
case "ko":
return LanguageKBN.KR;
default:
return LanguageKBN.EN;
}
}
else
{
return (LanguageKBN)HttpContext.Current.Session[SessionKey];
}
}
}
/// <summary>
/// 根據Msg.config内已有的key進行文本的取得。
/// </summary>
/// <param name="key">文本對應的key。</param>
/// <returns>返回文本值。</returns>
public static string Msg(string key)
{
return TAG_Value(key,consts_Web.UI_LANGUAGE_CONFIG_MSG_NAME);
}
/// <summary>
/// 根據Msg.config内已有的key以及指定的語言區分進行文本的取得。
/// </summary>
/// <param name="key">Msg.config内已有的key。</param>
/// <param name="languagekbn">指定的語言區分對象。</param>
/// <returns>返回文本值。</returns>
public static string Msg(string key,LanguageKBN languagekbn)
{
return TAG_Value(key,consts_Web.UI_LANGUAGE_CONFIG_MSG_NAME,true,languagekbn);
}
/// <summary>
/// 根據*.config内已有的key進行文本的取得。
/// </summary>
/// <param name="key">文本對應的key。</param>
/// <param name="configName">*对应名称</param>
/// <returns>返回文本值。</returns>
public static string TAG_Value(string key,string configName)
{
return TAG_Value(key,configName,false,LanguageKBN.EN);
}
/// 根據*.config内已有的key進行文本的取得。
/// </summary>
/// <param name="key">文本對應的key。</param>
/// <param name="configName">*对应名称</param>
/// <param name="IsSetLanguageKBN">是否通過最後一個參數(languagekbn)來進行文本的取得。</param>
/// <param name="languagekbn">指定文本取得依據的語言區分對象。</param>
/// <returns>返回文本值。</returns>
private static string TAG_Value(string key,string configName,bool IsSetLanguageKBN,LanguageKBN languagekbn)
{
DataRow[] DDR=DS(configName).Tables[0].Select(string.Format(consts_Web.UI_LANGUAGE_KEY_EXPRESSION,key));
switch(DDR.Length)
{
case 0:
Console.WriteLine(consts_Web.UI_LANGUAGE_EX_INFO1,configName+consts_Web.UI_LANGUAGE_CONFIG_SUFFIXNAME,key);
return consts_Web.UI_LANGUAGE_CONFIG_NOKEY_TEXT;
case 1:
break;
default:
throw new Exception(
string.Format(consts_Web.UI_LANGUAGE_EX_INFO2,
configName+consts_Web.UI_LANGUAGE_CONFIG_SUFFIXNAME,DDR.Length,key));
}
string CurrentLanguageKBN=null;
if(sysOnlySingleLanguageKBN_Value==-1)
{
if(IsSetLanguageKBN)
{
if(SysOnlySingleLanguageKBN_Value!=-1&&SysOnlySingleLanguageKBN_Value!=(short)languagekbn)
throw new Exception(consts_Web.UI_LANGUAGE_EX_INFO6);
CurrentLanguageKBN=languagekbn.ToString();
}
else
{
CurrentLanguageKBN=Current.ToString();
}
}
else
{
CurrentLanguageKBN=Enum.GetName(typeof(LanguageKBN),sysOnlySingleLanguageKBN_Value);
}
if(CurrentLanguageKBN==LanguageKBN.CHT.ToString())
{
return StringConvert.SChineseToTChinese(DDR[0][LanguageKBN.CHS.ToString()].ToString());
}
else
{
return DDR[0][CurrentLanguageKBN].ToString();
}
}
/// <summary>
/// 對Web界面控件文本進行多語言切換。
/// </summary>
/// <param name="ContainerCtl">包含所有服務器控件的容器控件。</param>
/// <res>只對遵照命名規則的服務器控件的文本進行語言切換。</res>
public static void ChangeControlsText(Control ContainerCtl)
{
if(SysOnlySingleLanguageKBN_Value!=-1)
throw new Exception(consts_Web.UI_LANGUAGE_EX_INFO5);
foreach(Control ctr in ContainerCtl.Controls)
{
if(ctr.ID!=null&&ctr.ID.StartsWith(consts_Web.UI_LANGUAGE_TAGPREFIX))
{
string[] ctrID=ctr.ID.Split('_');
if(ctrID.Length>1)
{
string Value=TAG_Value(ctrID[1],consts_Web.UI_LANGUAGE_CONFIG_TEXT_NAME);
switch(ctr.GetType().Name)
{
case "Label":
((Label)ctr).Text=Value;
break;
case "LinkButton":
((LinkButton)ctr).Text=Value;
break;
case "CButton":
((Button)ctr).Text=Value;
break;
//...
}
}
}
if(ctr.HasControls())
{
ChangeControlsText(ctr);
}
}
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<Text>
<TAG key="0001" CHS="国际贸易-供应链系统" JP="" KR="치과병원예약시스템" EN="" />
<TAG key="0002" CHS="中文" JP="" KR="중문등록" EN="" />
<TAG key="0003" CHS="韩文" JP="" KR="한문등록" EN="" />
<TAG key="0004" CHS="国际贸易" JP="" KR="" EN="" />
<TAG key="0005" CHS="供应链系统" JP="" KR="" EN="" />
<TAG key="00001" CHS="添加药品类别-" JP="" KR="약품분류추가" EN="" />
</Text>
这个写在在Text.config里面,假设一个Label吧你起名字就的LG_lblName 其余的控件都的起这样的前面加上LG_XX
然后在aspx里面的 <form> <asp:Panel ID="LG_Panel" runat="server" Width="100%">
<table> <tr> <td>ddd </td> </tr> </table> </asp:Panel > </form>这些都是必须的。然后调用的时候也就是我
给你的那个类在上面
CS里面这样调用 Language.ChangeControlsText(LG_Panel);
支持多国语言。 忘了起名字的时候假设国际贸易-供应链系统叫这个名字吧 ,那这个Label吧你起名字就的叫LG_0001必须和
Text.Config里面的 对起来 <TAG key="0001" CHS="国际贸易-供应链系统" JP=""
KR="치과병원예약시스템" EN="" />
这些都是我们做的韩国项目代码
看了那篇文章,有如下问题.
case "CButton":
((Button)ctr).Text=Value;
break;
//...
请问这里如果是下拉列表控件如果设置呢?如何用资源文件或者语言文件实现?如:
<asp:DropDownList ID="ddlPlace" runat="server" Width="150px">
<asp:ListItem Value="">=請選擇地點=</asp:ListItem>
<asp:ListItem Value="0">中国</asp:ListItem>
<asp:ListItem Value="1">香港</asp:ListItem>
<asp:ListItem Value="2">澳門</asp:ListItem>
<asp:ListItem Value="3">台湾</asp:ListItem>
<asp:ListItem Value="4">國外地區</asp:ListItem>
</asp:DropDownList>
英文的时候要依次显示Please select the place,china,macau,hongkong,taiwan,oversea其二.数据读取的时候,如某个字段只有0,1,显示的时候,中文0显示为"男",1显示为"女",那么英文的时候0 显示为"male",1显示为"femal",
比较笨的方式是写个function,传入SexCode and LanguageCode然后判断显示,如何实现智能的绑定(象资源文件那样直接绑定到一个值,然后全局加载语言环境就行了)?
这里有没有办法实现自动匹配来显示?
<asp:DropDownList ID="ddlPlace" runat="server" Width="150px">
<asp:ListItem Value="">=請選擇地點= </asp:ListItem>
<asp:ListItem Value="0">中国 </asp:ListItem>
ruguo bushi cong shujuku limian duqu chulai de hua keyi dingyi
<%#FSSoft.Web.UI.Language.Msg("c00013")%>
zhi yao zai config limian peizhi hao xiangying mingzi jiu keyi
<asp:DropDownList ID="ddlPlace" runat="server" Width="150px">
<asp:ListItem Value="">=請選擇地點= </asp:ListItem>
<asp:ListItem Value="0">中国 </asp:ListItem>
ruguo bushi cong shujuku limian duqu chulai de hua keyi dingyi
<%#FSSoft.Web.UI.Language.Msg("c00013")%>
zhi yao zai config limian peizhi hao xiangying mingzi jiu keyi
===============
也就是说每个项单独绑定一次?
<asp:ListItem Value="0"><%#FSSoft.Web.UI.Language.Msg("0")%></asp:ListItem>
<asp:ListItem Value="1"><%#FSSoft.Web.UI.Language.Msg("1")%></asp:ListItem>
是否是这个意思?如果是,那可能是不我想要的那样的了是想绑定到一个对应的列表,而且不是每个项又单独绑定一次的了我想知道是就是有没有列表方式整体绑定的方法,还是就是第二个问题,如果是数据库读出,要怎么智能绑定呢?and would u pls using wording in english instead of pinying if u can't type in character...it's waste so much time to convert your explanation. ^_^
只是死的多语言。例如 你好 可以 可以在config里面定义多语言。
<TAG key="0001" CHS="你好" JP=""
KR="치과병원예약시스템" EN="Hello" /> 这种。数据库没进行多语言
可以发送你的完整的源代码来看下呢?
我的email: [email protected]
我们是把那些需要国际化的字段都放进资源文件里,然后写一个公有的类去读就OK了~
默认的语言:UIResource.resx
name value
例:button_text_close 閉じる需要的语言:UIResource.zh-CHS.resx
name value
button_text_close 关闭
是否是这样的实现方式?
<asp:ListItem Value="0"> <%$ Resources:Resource,TestString %> </asp:ListItem>
<asp:ListItem Value="1"> <%$ Resources:Resource,TestString %></asp:ListItem>
有没有好的方法可以绑定到类似于列表控件那些的呢?
还是数据库输出时呢?如:数据读取的时候,如某个字段只有0,1,显示的时候,中文0显示为"男",1显示为"女",那么英文的时候0 显示为"male",1显示为"femal",
比较笨的方式是写个function,传入SexCode and LanguageCode然后判断显示,如何实现智能的绑定(象资源文件那样直接绑定到一个值,然后全局加载语言环境就行了)?
这里有没有办法实现自动匹配来显示? 请问下,这里你是怎么做的呢?