Foxtable(狐表)用户栏目专家坐堂 → 如何开发中英文版程序


  共有14137人关注过本帖树形打印复制链接

主题:如何开发中英文版程序

帅哥哟,离线,有人找我吗?
dm168
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:111 积分:1083 威望:0 精华:0 注册:2012/9/14 17:23:00
  发帖心情 Post By:2012/10/25 18:07:00 [显示全部帖子]

感谢谢老大的帮助,今天研究了一下,发现有点问题
语言对照表 字符串不能有空格,否则无法翻译
比如
                   cn           en
                 第一列     good girl   这里有空格,好像会取列名做标题,所以第一次成功翻译后,就不能反译过来
如果是
                 第二列     GoodGirl   这样就能对译

 Dim dr As DataRow = DataTables("Language").find("[English] = '" & cl.name.split("-")(0) 
对译时好像跟跟列名有关[English] 如果表的列名是中文,第一次能翻译成功,之后就不能反译过来(就算标题是英文也没用)要表的列名是英文才能对译,就是说条件语句里的列要跟表的列名的语种一至。才能对译成功
[此贴子已经被作者于2012-10-25 18:11:05编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
dm168
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:111 积分:1083 威望:0 精华:0 注册:2012/9/14 17:23:00
  发帖心情 Post By:2012/10/25 19:11:00 [显示全部帖子]

问题是列名称是不可以有空格的 标题可以有空格,但是在对译的时候行里有空格的却不能成功。

[此贴子已经被作者于2012-10-25 19:15:05编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
dm168
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:111 积分:1083 威望:0 精华:0 注册:2012/9/14 17:23:00
  发帖心情 Post By:2012/10/25 21:24:00 [显示全部帖子]

问题 解决了,如果列名是 中文  标题也要用中文    如果列名是英文 标题也要用英文,就不会有上面的问题!

Dim dr As DataRow = DataTables("表B").find("[cn] = '" & cl.name & "'")
改成
Dim dr As DataRow = DataTables("表B").find("[cn] = '" & cl.Caption & "'")

上面的代码好像找的是列名 下面的代码找的是标题名,因为老大帮我写的时候可能没有设标题所以要用列名才能通过

-------------------------------------------------------------------------------------------------------

下面这个黄色的地方分隔符,不明白这个做什么用的

                Dim dr As DataRow = DataTables("表B").find("[en] = '" & cl.caption.split("_")(0) & "'")
[此贴子已经被作者于2012-10-25 22:20:51编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
dm168
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:111 积分:1083 威望:0 精华:0 注册:2012/9/14 17:23:00
  发帖心情 Post By:2012/10/26 17:34:00 [显示全部帖子]

老大窗口我总是翻译不成功,有时间再帮我看一下吧!!
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:th.rar
有个地方我很不明白
For Each c As Winform.Control In Forms(Vars("当前窗口名称")).Controls
If Typeof c Is WinForm.TreeView Then
Dim trv As WinForm.TreeView = Forms(Vars("当前窗口名称")).Controls(c.name)
For Each nd As WinForm.TreeNode In trv.AllNodes
Dim dr As DataRow = DataTables("表B").find("[en] = '" & nd.name & "'")
If dr IsNot Nothing
nd.text = dr(getConfigValue("语言类别", "cn"))
End If
Next
Else
Dim dr As DataRow = DataTables("表B").find("[en] = '" & c.name.split("_")(0) & "'")
If dr IsNot Nothing
Forms(Vars("当前窗口名称")).Controls(c.name).text = dr(getConfigValue("语言类别", "cn"))
End If
End If
Next

筛选用的是控件的名不是标题 ,可是在对照表中并没有出现控件名就连标题在对照表中也没出现,可是就是能成功翻译,
不明白find("[en] = '" & c.name.split("_")(0) & "'")怎么会成立
列如你给我的文件中有一个
按钮名Button_1  标题 BUTTON1 [en] 怎么会= 
按钮名Button_1 
   cn                                            en
第一列 english1
第二列 english2
第三列 english3
英文 english
中文 Chinese
全部节点 fullnodes
标签 label
按钮 Button
复选框 CheckBox
单选框 RadioButton
[此贴子已经被作者于2012-10-26 17:42:21编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
dm168
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:111 积分:1083 威望:0 精华:0 注册:2012/9/14 17:23:00
  发帖心情 Post By:2012/10/26 20:43:00 [显示全部帖子]

如果改的是控件名,那如果控件被 引用后又被改名,是不是会出错啊?会有这种可能吗?

 回到顶部
帅哥哟,离线,有人找我吗?
dm168
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:111 积分:1083 威望:0 精华:0 注册:2012/9/14 17:23:00
  发帖心情 Post By:2012/10/26 22:42:00 [显示全部帖子]

find("[en] = '" & c.name.split("_")(0) & "'")  

现在知到split("_")(0)   这个是做什么用的了
因为筛选的是控件名所以为区分语言表的英文对应控件名"_"之前的字符,比如控件 按钮,英文是button 对应控件名button_1 把button 和1用 _ 分开 老大这思路利害啊!

---------------------------------------------------------------------------------------------------------------------------------------
开始没明白还想把代码改成这样但是只能译成中文 不能反译英文,

For Each c As Winform.Control In Forms(Vars("Fname")).Controls
    If Typeof c Is WinForm.TreeView Then
        Dim trv As WinForm.TreeView =  Forms(Vars("Fname")).Controls(c.name)
        For Each nd As WinForm.TreeNode In trv.AllNodes
            Dim dr As DataRow = DataTables("表B").find("[en] = '" & nd.name & "'")
            If dr IsNot Nothing
                nd.text = dr(getConfigValue("语言类别", "cn"))
            End If
        Next
    Else
Dim ct As String =  Forms(Vars("Fname")).Controls(c.name).text 

        Dim dr As DataRow = DataTables("表B").find("[en] = '" & ct.split("_")(0) & "'")
        If dr IsNot Nothing
            Forms(Vars("Fname")).Controls(c.name).text = dr(getConfigValue("语言类别", "cn"))
        End If
    End If
Next
[此贴子已经被作者于2012-10-26 22:46:27编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
dm168
  17楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:111 积分:1083 威望:0 精华:0 注册:2012/9/14 17:23:00
  发帖心情 Post By:2012/11/9 17:23:00 [显示全部帖子]

老大后面两个for each 语法不对 要怎么写才对啊?还有程式菜单要怎么实现对译呢?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目9.rar

Dim dr As DataRow
If e.Form.Controls("English_1").Checked = True
For Each tb As Table In Tables
For Each cl As col In tb.cols
dr = DataTables("表B").find("[cn] = '" & cl.caption & "'")
If dr IsNot Nothing
cl.Caption = dr("en")
End If
Next
tb.BuildHeader()
Next
For Each rt As RibbonMenu.Tab In RibbonTabs '菜单工能区
dr = DataTables("表B").find("[cn] = '" & rt.text & "'")
If dr IsNot Nothing
rt.text = dr("en")
End If
For Each gp As RibbonMenu.Group In RibbonTabs(rt.name).Groups '菜单功能组
dr = DataTables("表B").find("[cn] = '" & gp.text & "'")
If dr IsNot Nothing
gp.text = dr("en")
End If
For Each itm As RibbonMenu.RibbonItem In RibbonTabs(rt.name).Groups(gp.name).Items '菜单项目
Dim itms As String = RibbonTabs(rt.name).Groups(gp.name).Items(itm.name).text
dr = DataTables("表B").find("[cn] = '" & itms & "'")
If dr IsNot Nothing
RibbonTabs(rt.name).Groups(gp.name).Items(itm.name).text = dr("en")
End If
Next
Next
Next
For Each q As object In QAT.Items
dr = DataTables("表B").find("[cn] = '" & q.text & "'")
q.text = dr("en")
Next
For Each c As object In ConfigBar.Items
dr = DataTables("表B").find("[cn] = '" & c.text & "'")
c.text = dr("en")
Next
SaveConfigValue("语言类别", "cn")
End If
Functions.Execute("窗口翻译")

 回到顶部
帅哥哟,离线,有人找我吗?
dm168
  18楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:111 积分:1083 威望:0 精华:0 注册:2012/9/14 17:23:00
  发帖心情 Post By:2012/11/9 17:36:00 [显示全部帖子]

解决了,少了 if isnot nothing 但是程式菜单还是无法实现不知要怎么做?

 回到顶部
帅哥哟,离线,有人找我吗?
dm168
  19楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:111 积分:1083 威望:0 精华:0 注册:2012/9/14 17:23:00
  发帖心情 Post By:2012/11/11 9:36:00 [显示全部帖子]

老大这个导航栏要怎么进入偱环?插不进去,再帮我看一下吧!提示WinForm.TreeView 要用end if结速,那导航栏双不能在end if 外面,要怎么做呢?

Dim dr As DataRow
For Each c As Winform.Control In Forms(Vars("当前窗口名称")).Controls
If Typeof c Is WinForm.TreeView Then
Dim trv As WinForm.TreeView = Forms(Vars("当前窗口名称")).Controls(c.name)
For Each nd As WinForm.TreeNode In trv.AllNodes
dr = DataTables("表B").find("[en] = '" & nd.text & "'")
If dr IsNot Nothing
nd.text = dr(getConfigValue("语言类别", "cn"))
End If
Next
If Typeof c Is WinForm.NavBar Then
Dim bar As WinForm.NavBar = Forms(Vars("当前窗口名称")).Controls(c.name)
For Each nb As WinForm.NavPage In bar.NavPages
dr = DataTables("表B").find("[en] = '" & nb.ButtonText & "'")
If dr IsNot Nothing
nb.ButtonText = dr(getConfigValue("语言类别", "cn"))
End If
Next

Else
Dim ct As String = Forms(Vars("当前窗口名称")).Controls(c.name).text
dr = DataTables("表B").find("[en] = '" & ct & "'")
If dr Is Nothing
dr = DataTables("表B").find("[cn] = '" & ct & "'")
If dr IsNot Nothing
Forms(Vars("当前窗口名称")).Controls(c.name).text = dr(getConfigValue("语言类别", "en"))
End If
Else
Forms(Vars("当前窗口名称")).Controls(c.name).text = dr(getConfigValue("语言类别", "cn"))
End If
End If
Next


 回到顶部
总数 20 上一页 1 2