我想做一个韩文和中文可以自动转换的c# winForm 程序。
请问各位大侠们,有没有人可以详细的告诉我怎么做啊?
我目前对翻译类的软件原理了解程度为零希望高手可以耐心的做一个详细讲解。
谢谢谢谢。。

解决方案 »

  1.   

     winForm   不会要是webform会。
      

  2.   

    我们用的是在config里面设置多国语言。然后用一个语言类来控制那个语言。
    还有一种是JS的多国语言。
      

  3.   

    我给你找找那个转换语言类吧。希望对你有帮助,我要分。多给点
    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;
    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);
    }
    }
    }
    }
    }
      

  4.   

    去看MSDN中“全球化和本地化”部分章节...ps:别指望可以自动翻译韩文中文...全部都得人工翻译...程序只能按事先翻译好的显示而已...
      

  5.   

    <?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);
    支持多国语言。
      

  6.   

    忘了起名字的时候假设国际贸易-供应链系统叫这个名字吧 ,那这个Label吧你起名字就的叫LG_0001必须和
    Text.Config里面的 对起来 <TAG   key="0001"   CHS="国际贸易-供应链系统"   JP="" 
      KR="치과병원예약시스템"   EN=""   /> 
      

  7.   

    如果用数据库就简单多了,access都可以