需要实现中,英两种版本如下几种情况能用资源文件解决吗?
1)aspx页面js代码包括中文,切换时要换成英文.2)<input type="text" id="test" tend="值值" value=""> //注:tend为自定义的属性,"值值"要如何换呢?3)用户名:<input type="text" id="username" runat="server"> //用户名要如何切换呢?请明细,谢谢·
1)aspx页面js代码包括中文,切换时要换成英文.2)<input type="text" id="test" tend="值值" value=""> //注:tend为自定义的属性,"值值"要如何换呢?3)用户名:<input type="text" id="username" runat="server"> //用户名要如何切换呢?请明细,谢谢·
相应的语言版本的资源文件可以自己拷贝生成,比如:中文的文件:Form1.zh-cn.resx
在相应的Key里,设置相应的值就可以。
2. 在相应页面,或者定义页面基类,重写InitializeCulture方法
Protected Overrides Sub InitializeCulture()
MyBase.InitializeCulture()
Dim culture As String = Request("DropDownList1") '指定语言,中文:zh-cn, 英文:en-us等。
If Not String.IsNullOrEmpty(Culture) Then
Threading.Thread.CurrentThread.CurrentUICulture = New CultureInfo(Culture)
Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Culture)
End If
End Sub这样你切换CultureInfo就能够实现自动切换。
可以用后台取得,在js中再从后台取得值。
2
将html控件添加 runat="server" 属性后就可以和text属性一样绑定了:tend="<%$ Resources.Resource.zhizhi%>"
3
用户名还要切换干啥?!
请具体点,最好能给我一个实例,网上有很多,但一般不能满足上面我提到的3点.应用是asp.net(c#)
对于第三点,用户名当然要切换,就是<input type="text"...前面的文字呀。
若采用资源文件的做法,岂不是每个aspx页面对应一个资源文件?若我有1000个aspx页面,资源文件就得有1000个。我更希望的是:希望它能加载我自定义的xml文件,我把所有翻译好的全放在一个xml中,方便维护。不知你是如何看这个问题的?谢谢
------------------
不用啊~你一种语言用一个资源文件就可以了
不要用写的,也用个服务器控件,比如:
<asp:Literal ID="Literal1" Text="<%$ Resources.Resource,username %>" runat="server"></asp:Literal>,
可以使用App_GlobalResource
username 用户名:
英文的资源文件里写上:
username username:
"用户名"采用<%=取资源文件中的值%> 是吗?请明细,我就是不明白这步
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);
}
/// <summary>
/// 根據*.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;
请进来回答一下呀.
using FSSoft.Common.IO;
using FSSoft.Common.TextUtil;
这些是数据库类