当前位置:编程学习 > C#/ASP.NET >>

100分急求asp.net本地化的解决方案!!!

最近在做一个国外的项目,首次涉及到asp.net本地化和国际化的内容,故用一周的时间查找相关资料。
1、找到的资料全部了讲了asp.net有关本地化和国际化的知识,包括全局资源和本地资源。如果按照微软提供的方法。如
果有1000个页面,且不是要生成1000相应语言的本地资源文件,翻译工作肯定是其它人来实现,如果让他人一个一个打开
文件来翻译,这样做太烦。不知各位有没有更好的方法?

2、我的想法是设计一个数据库表,包含如下列(页面名,控件名,控件属性,中文字符,西班牙文字符),我负责把此表的
前四个列的数据填写,做翻译的人负责最后一列数据的填充。我在asp.net页面中设计一个祖先类,根据所选择的语言设置
控件的相应属性。不知这样是否行的通?

3、不知是否还有更好的解决方法,请赐教,不胜感激! --------------------编程问答-------------------- 关注下... --------------------编程问答-------------------- 找本地化公司做吧... --------------------编程问答-------------------- 关注

UP~ --------------------编程问答-------------------- 关注

UP~ --------------------编程问答-------------------- mark --------------------编程问答-------------------- 有人做过吗?不要都UP! --------------------编程问答-------------------- asp的没做过,不过cakephp里面到提供了这样一个功能,楼主可以参考一下他的做法。 --------------------编程问答-------------------- mark --------------------编程问答-------------------- 我在2003到2004年的时候基于微软的多语言支持框架实现了一套本地化软件和流程:

sorry. i have to switch to English to speed up:

1) you must inherit every web page to a BasePage class that supports localization/internalization
2) In the BasePage class, you shall provide a means to automatically retrieve those strings that need to be localized. Those strings shall be pulled out from each web page and populated into a database for localization purpose. However, you must manually open these pages one by one that in order to extract their strings and populate localizaition d/b.
3) develop a localization utility tool to provide GUIs that load the strings from the above localization database and allow language expert to conduct translation and the result will be saved back to database. the utility finally shall generate the localization/resource assemblies to be used by each webpage.
4) In your BasePage, during PreRender time, it shall fetch the string localization resource from the generated assembly and poulate the web control to localize them. some recursive loop technique must be applied here.

Lastly, you are good to go to load web page in localized languages. You may provide options to allow end users to switch to any language they prepfer which can be as well handled in BasePage class. --------------------编程问答-------------------- 你的方法是可行的。

用ASP.NET内置的资源做法,实际上是用一个ExpressionBuilder去识别读取资源的Expression,然后从资源文件读取数据。你可以自己实现一个ExpressionBuilder,从数据库读取数据。 --------------------编程问答-------------------- 10楼能具体一些吧吗? --------------------编程问答-------------------- 急,自己顶一下。 --------------------编程问答-------------------- 先看代码吧,不难...

Web.config

定义一个现在所使用的语言版本

<add key="Language" value="en" />

Language.xml

<?xml version="1.0" encoding="utf-8" ?>
<Root>
    <Language>

        <cn_FirstPage>首页</cn_FirstPage>
        <en_FirstPage>FirstPage</en_FirstPage>

        <cn_PrevPage>上页</cn_PrevPage>
        <en_PrevPage>PrevPage</en_PrevPage>

        <cn_NextPage>下页</cn_NextPage>
        <en_NextPage>NextPage</en_NextPage>

        <cn_LastPage>上页</cn_LastPage>
        <en_LastPage>LastPage</en_LastPage>

        <cn_RecordCount>总记录</cn_RecordCount>
        <en_RecordCount>RecordCount</en_RecordCount>

        <cn_PageSize>每页</cn_PageSize>
        <en_PageSize>PageSize</en_PageSize>

        <cn_PageCount>总页数</cn_PageCount>
        <en_PageCount>RecordCount</en_PageCount>

    </Language>
</Root>



读取xml文件的属性

public string GetXmlReadValue(string XmlName,string Key)
        {
            XmlDocument MyXmlDocument=new XmlDocument();
            MyXmlDocument.Load(HttpContext.Current.Server.MapPath(XmlName));
            XmlNodeList MyXmlNodeList = MyXmlDocument.GetElementsByTagName(Key);
            if(MyXmlNodeList.Count==0)
            {
                return "";
            }
            else
            {
                XmlNode MyXmlNode=MyXmlNodeList[0];
                return MyXmlNode.InnerText;
            }
        }

读取具体选择语言的属性

public string GetLanguageValue(string Key)
        {
            string Language=ConfigurationSettings.AppSettings["Language"].ToLower();
            try
            {
                return this.GetXmlReadValue("/Language.xml",Language+"_"+Key);
            }
            catch
            {
                return null;
            }
        }

具体调用方法,如调用上页

this.GetLanguageValue("PrevPage")

需要注意的是xml文件要保存为UTF-8格式,欢迎大家点评! --------------------编程问答-------------------- 国际化和本地化用asp.net内置的资源应该就足够了的,我抄过这方面的代码,不过是抄,所以影响不是很深! --------------------编程问答-------------------- 推荐用资源文件。搜索关键字"asp.net 资源文件",可以找到很多好的例子。
强烈不建议使用数据库存放。
一个个汉字翻译是必须的,也是肯定的,不然不就成金山糍粑了吗? --------------------编程问答-------------------- jf --------------------编程问答--------------------
引用楼主 seinu 的帖子:
1、找到的资料全部了讲了asp.net有关本地化和国际化的知识,包括全局资源和本地资源。如果按照微软提供的方法。如 
果有1000个页面,且不是要生成1000相应语言的本地资源文件


不了解.net的国际化 但是JAVA中STRUTS的国际化是一个语言对应一个本地资源文件

如果一个页面对应一个本地资源文件的话....我觉得那就不是国际化了 --------------------编程问答-------------------- web.config配置
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="auto" uiCulture="auto"/>

==================================================================================================
用来指定语言类型
global.asax文件
void Application_PreRequestHandlerExecute(object sender, EventArgs e)
  {
    if (!string.IsNullOrEmpty(BlogSettings.Instance.Culture))
    {
      if (!BlogSettings.Instance.Culture.Equals("Auto"))
      {
        CultureInfo culture = CultureInfo.CreateSpecificCulture(string name);
        Thread.CurrentThread.CurrentUICulture = culture;
        Thread.CurrentThread.CurrentCulture = culture;
      }
    }
  }

==================================================================================================
然后建一个App_GlobalResources目录用来放资源文件,资源文件的命名规则labels.zh-CN.resx(简体中文)labels.zh-TW.resx(繁体中文)也就是操作系统中的语言类型
调用:<%=Resources.labels.home %>home是对应资源里的名称
不知道能不能帮上你! --------------------编程问答--------------------
引用 17 楼 arthtic 的回复:
引用楼主 seinu 的帖子:
1、找到的资料全部了讲了asp.net有关本地化和国际化的知识,包括全局资源和本地资源。如果按照微软提供的方法。如 
果有1000个页面,且不是要生成1000相应语言的本地资源文件 

不了解.net的国际化 但是JAVA中STRUTS的国际化是一个语言对应一个本地资源文件 

如果一个页面对应一个本地资源文件的话....我觉得那就不是国际化了

.net中也是一种语言对应一个资源文件的。 --------------------编程问答-------------------- 观望 --------------------编程问答-------------------- 用ASP.NET内置的资源做法,实际上是用一个ExpressionBuilder去识别读取资源的Expression,然后从资源文件读取数据。你可以自己实现一个ExpressionBuilder,从数据库读取数据。 --------------------编程问答-------------------- UP.学习,以后肯定会碰到。 --------------------编程问答-------------------- 自己再顶一下 --------------------编程问答-------------------- 再顶一下 --------------------编程问答-------------------- 学习,up --------------------编程问答-------------------- 使用resource 文件,在web.config  里面进行配置,根据不同的标志,程序使用不同的resource 文件 --------------------编程问答--------------------
引用 11 楼 seinu 的回复:
10楼能具体一些吧吗?


你可以看看这篇文章:
http://aspalliance.com/1113_Creating_a_Custom_ExpressionBuilder_in_ASPNET_20

里面说到如何做自定义ExpressionBuilder。你现在需要的就是一个ExpressionBuilder,里面解释Expression然后读取数据库。我想你可以先用Reflector去看看系统自带的一些ExpressionBuilder是怎样实现的。 --------------------编程问答-------------------- 建议不要用数据库方式做,太麻烦了,你要保存页面名,控件名等。。
用资源文件的方式很方便。大部分工作都是自动完成的。具体资料搜索下很多。 --------------------编程问答--------------------

        
--------------------编程问答--------------------

            原来做过多语言的

记得把所有页面展示的文字 都用lable.text="中文"

都用lable代替,  只有这样,切换语言才能在资源文件里面 赋值相应的语言
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,