高手留步,多国语疑问

xiaoks668 2008-10-29 07:46:28
功能我已经实现了,方法:页面语言设置为auto,然后再添加资源文件,这样就可实现根据访客的IE设置来显示不同的语言。
演示: http://www.10000free.com ,在IE,工具,internet选项,语言中分别添加日语[ja],英语[en-us],并将其置为首选项,再刷新页面即可更换语言,语言是google自动翻译的,高手勿笑。
这种方法的几种弊端:
1.不够人性化,比如我用IE打开是中文,换火狐就变成英文了,除外,客户端的设置偏差也可能导致非期望的页面语言出现。
2.不利于搜索引擎收录,现在google只收录了几个英文页,如果加上语言切换连接,google可能会多收几页吧。
我的问题:
我想在页面加个连接,比如?language=en-us,访客一点的话,就把en-us写进SESSION, 然后每个页面(已设置语言为auto)优先根据SESSION的值来显示相关语言,然后如果没有SESSION再根据auto显示。
难点:如何让每个页面的Lable使用SESSION指定的资源文件.我以前也搜索过不少相关文章,一直没有实现这个功能,请高手帮帮我。
...全文
328 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lonfone 2008-11-02
  • 打赏
  • 举报
回复
界面多语种处理方式有很多,

要是数据也要多语种就烦了,所有有名字 有字符串的地方都是多语,比如 供应商名,中/英/德, 产品名 中英德, 项目名 中英德 这个就烦了,显示的时候,还得根据语种用不同的字段,GRID显示也时, 还没啥好办法,除了分别加不同的字段, 动态用字典翻译吧,恐怕性能...
xiaoks668 2008-11-02
  • 打赏
  • 举报
回复
非常感谢江大鱼,我马上结贴。

http://www.10000free.com/index.aspx?lang=ko-kr
jzywh 2008-11-01
  • 打赏
  • 举报
回复
设置cookie的代码写到return后面去了, 再把exception log一下

protected override void InitializeCulture()
{

string lang = Request.QueryString["lang"];
if (!string.IsNullOrEmpty(lang))//如果URL中有参数,则执行URL中设定的语言,并更新cookie
{
try
{

CultureInfo culture = new CultureInfo(lang);

if (culture != null)
{
HttpCookie cookie = Request.Cookies["myklang"];
if(cookie != null)
{
Response.Cookies.Remove("myklang");
}
cookie = new HttpCookie("myklang");
cookie.value = lang;
cookie.Expires = DateTime.Now.AddDays(30)
Response.Cookies.Set(cookie);

Thread.CurrentThread.CurrentUICulture = culture;
Thread.CurrentThread.CurrentCulture = culture;
return;
}
}
catch
{
//TODO: add your log code
}
}
else //如果url中没有语言参数
{
HttpCookie cookie = Request.Cookies["myklang"];
if (cookie != null)//如果cookie存在则按cookie设定的语言执行
{
string mycookie = cookie.Value;
try
{
CultureInfo culture = new CultureInfo(mycookie);
if (culture != null)
{
Thread.CurrentThread.CurrentUICulture = culture;
Thread.CurrentThread.CurrentCulture = culture;
return;
}
}
catch
{
//TODO: add your log code
}
}

}

base.InitializeCulture();

}



我修改了一下, 没编译, 思路在哪里, 你再改改
zpcoder 2008-11-01
  • 打赏
  • 举报
回复

应该用 cookie 记录语言信息
zhangli0911 2008-11-01
  • 打赏
  • 举报
回复
up
xiaoks668 2008-11-01
  • 打赏
  • 举报
回复
其它搞定了,现在是cookie不起作用,且运行较慢。

protected override void InitializeCulture()
{

string lang = Request.QueryString["lang"];
if (!string.IsNullOrEmpty(lang))//如果URL中有参数,则执行URL中设定的语言,并更新cookie
{
try
{

CultureInfo culture = new CultureInfo(lang);

if (culture != null)
{
Thread.CurrentThread.CurrentUICulture = culture;
Thread.CurrentThread.CurrentCulture = culture;
return;
if (Request.Cookies["myklang"] != null)//如果cookie已经存在则删除,防止更新后出现延迟
{
Response.Cookies["myklang"].Expires = DateTime.Today.AddDays(-1);
}
Response.Cookies.Add(new HttpCookie("myklang", lang));
Response.Cookies["myklang"].Expires = DateTime.Now.AddDays(30);
}
}
catch
{
}
}
else //如果url中没有语言参数
{
if (Request.Cookies["myklang"] != null)//如果cookie存在则按cookie设定的语言执行
{
string mycookie = Request.Cookies["myklang"].Value;
try
{
CultureInfo culture = new CultureInfo(mycookie);
if (culture != null)
{
Thread.CurrentThread.CurrentUICulture = culture;
Thread.CurrentThread.CurrentCulture = culture;
return;
}
}
catch
{
}
}

}

base.InitializeCulture();

}

xiaoks668 2008-10-31
  • 打赏
  • 举报
回复
究竟怎样最好啊? 最好不要改动普通页面。

另外问下如何在普通页调用那个类?函数怎么写?
jzywh 2008-10-31
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 xiaoks668 的回复:]
究竟怎样最好啊? 最好不要改动普通页面。

另外问下如何在普通页调用那个类?函数怎么写?
[/Quote]

基本不用改普通页面阿, 就把基类Page改成BasePage就ok了,这一点重构的勇气都没有,那还怎么写出优秀的代码?
lucio2007 2008-10-30
  • 打赏
  • 举报
回复
用COOKIES吧
mjjzg 2008-10-30
  • 打赏
  • 举报
回复
你用的是SESSION来传值,那就用它来进行传值啊,当从一个页面到另个页面时,将保存在SESSION中的值也传过去,并接收,给个判断,如果SESSION中有值,就使用,否则为默认的
sjt000 2008-10-30
  • 打赏
  • 举报
回复
同意jzywh 同学
写个基类,然后每个页面继承,在基类中写一个设置线程的语言就可以了
ZKM_ZHANG 2008-10-30
  • 打赏
  • 举报
回复
用APPLICATION保存语言种类.
hanqingyu 2008-10-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jzywh 的回复:]
C# code
protected override void InitializeCulture()
{

string lang = Request.QueryString["lang"];

if (!string.IsNullOrEmpty(lang))
{
try
{
CultureInfo culture = new CultureInfo(lang);

if (culture != null)
{
Thread.CurrentThread.CurrentUICulture = culture;
Thread.CurrentThr…
[/Quote]

要多学点新知识
C5662601 2008-10-30
  • 打赏
  • 举报
回复
通过session去调取相应的资源文件就可以呀
jzywh 2008-10-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xiaoks668 的回复:]
各位大哥,是不是放模板页后台不行啊? 那我放app_code目录里,现在不想改动每一个.cs文件, 能否通过什么方法来全局设置啊? 比如web.config? 请给点代码吧。我对什么类的使用一窍不通啊。
[/Quote]

你的叶面没有统一的基类本来就是一种不佳实践。
jzywh 2008-10-29
  • 打赏
  • 举报
回复
叶面基类不是masterpage...


public partial class YourPage : BasePage
{


}

BasePage 放到单独的Library项目下面或者App_Code下面

public class BasePage
{
protected override void InitializeCulture()
{
..............
}
}
三碗猪脚 2008-10-29
  • 打赏
  • 举报
回复
学习,帮顶。。。
xiaoks668 2008-10-29
  • 打赏
  • 举报
回复
各位大哥,是不是放模板页后台不行啊? 那我放app_code目录里,现在不想改动每一个.cs文件, 能否通过什么方法来全局设置啊? 比如web.config? 请给点代码吧。我对什么类的使用一窍不通啊。
kfps8kfps8 2008-10-29
  • 打赏
  • 举报
回复
这个问题值得关注...
xiaoks668 2008-10-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jzywh 的回复:]
页面基类里面
Thread.CurrentThread.Cultrue = ....;
[/Quote]
这个代码应该放哪里?

我添加了Globalization和Threading的引用,然后把代码放在普通CS文件中里,语言切换功能可以正确实现,但放在模板页的cs文件里出错。提示:images.InitializeCulture(): 没有找到适合的方法来重写



using System;
using System.Data;
using System.Data.OleDb;
using System.Configuration;
using System.Collections;
using System.Globalization;
using System.Threading;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class images : System.Web.UI.MasterPage
{
protected override void InitializeCulture()
{

string lang = Request.QueryString["lang"];

if (!string.IsNullOrEmpty(lang))
{
try
{
CultureInfo culture = new CultureInfo(lang);

if (culture != null)
{
Thread.CurrentThread.CurrentUICulture = culture;
Thread.CurrentThread.CurrentCulture = culture;
return;
}
}
catch (Exception)
{

}
}

base.InitializeCulture();//是不是这里出问题了?

}
protected void Page_Load(object sender, EventArgs e)
{

}

}
加载更多回复(3)

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧