131738 发表于 2011-5-29 22:11:59

回复131738


    我尚不清楚前辈的翻译制作过程,所以也没法出主意~
如果可以的话,我的想法如下: ...
afan 发表于 2011-5-29 21:40 http://autoitx.com/images/common/back.gif

你说的我明白的,性格使然吧。。。老有点不满意的感觉,另外也是练一练吧,如果成功(概率很大的)的话,以后管它有无修改,全部过一遍。。。
刚完成测试,11个语句,用文件清单数组循环替换,80080毫秒,定向替换,7023毫秒。。。两种
方法效果完全一样。。。

afan 发表于 2011-5-29 21:40:49

本帖最后由 afan 于 2011-5-29 22:18 编辑

回复 1259# 131738


   至此我还不清楚前辈的翻译制作过程,所以也没法出主意~

   如果可以的话,我的想法如下:

1,不做重复劳动。如未更新的部分则不需要再重新汉化,直接使用原有的汉化htm文件,毕竟已汉化的部分经过了反复的纠错和润色,重新汉化肯定还不如历史汉化的。
   用我之前写的的那个对比查看更新的工具找出需更新汉化的文件(需要的话我还可加工下,将更新的文件按原目录结构抽取出来,方便使用),这样工作量将大大降低,且可持续累积更新。
2,汉化有更新的htm文件。我想每次的更新内容应该并不多,汉化可先粗再细。
   制作一个通用的Ini文件,将有更新的文档过一遍,再直接手工汉化可能更直接。

net_e 发表于 2011-5-29 21:33:06

看看这是什么呢?

131738 发表于 2011-5-29 17:36:28

本帖最后由 131738 于 2011-5-29 17:53 编辑

回复131738

是测试我修改的脚本(1248楼的),是只有11条替换,因为没有去除Msgbox提示,所以有适当延 ...
afan 发表于 2011-5-29 13:54 http://autoitx.com/images/common/back.gif

[ _ReplaceStringInFile() ,而是替换所有的翻译之后一次性写入 ]这个我还不会,我的新想法是

扩大二维数组到四维数组:[$i]=搜索字、[$i]=替换字、[$i]=htm文件名、[$i]=所属目录

然后定向到与搜索,不使用 $File_Array 文件清单数组(这个是全面搜索吧。。。),应该会节

省不少时间吧。。。这样我只会使用 _ReplaceStringInFile() 函数,并设置该函数最后一个参数为 0 。

有否其它函数可用尚不知道。。。现在刚做好四维数组,还没测试。。。。。。

完全不懂编程,只能是误打误撞吧!!!!呵呵!!!

afan 发表于 2011-5-29 13:54:36

回复 1256# 131738

是测试我修改的脚本(1248楼的),是只有11条替换,因为没有去除Msgbox提示,所以有适当延时,实际应该就是十多秒吧~ 不过59分钟替换416条应该还可以优化,比如不要用_ReplaceStringInFile() ,而是替换所有的翻译之后一次性写入,等等。应该在几分钟以内。

qkyj 发表于 2011-5-29 09:14:18

支持一下{:face (356):}

131738 发表于 2011-5-29 01:58:08

回复131738


    前辈是怎样操作的?我这里测试完全正常~
将需要汉化的html文件夹拖放到第一个输入 ...
afan 发表于 2011-5-28 23:02 http://autoitx.com/images/common/back.gif

是否用你在 1248 楼回复帖的的那个脚本?那个脚本我这里确实不行,不过没在 XP 测试!

因为自从你发起为中文搜索修改文档编码以来,整个过程都是在 Win7 中完成的!

只是 3370 出来后,才想到将所有汉化句子事先写入二维数组,一键汉化完成(如果不这样,

而是逐条对比新旧 htm 文件再修改也是比较麻烦和费力的),这才修改你的“文本替换”脚本的,

结果一放入二维数组,“文本替换”就不行了。。。

至于‘不到一分钟就完成了’问题,1248 楼只有 11 条替换,我说的 59 分钟是有 416 条替换,

由于是测试,运行中每条替换的写、 读都加了 Sleep(550) 暂停的,目前看效果很好!

59分钟等于手工操作的大约30小时。。。呵呵。。。

tubaba 发表于 2011-5-28 23:56:00

以前有一个帮助文档的,结果不见了,哎

afan 发表于 2011-5-28 23:02:47

回复 1253# 131738


    前辈是怎样操作的?我这里测试完全正常~
将需要汉化的html文件夹拖放到第一个输入框,然后点击“文本替换”,不到一分钟就完成了

131738 发表于 2011-5-28 22:13:49

回复131738


    我想我大概明白了~
afan 发表于 2011-5-27 22:34 http://autoitx.com/images/common/back.gif

这个还是生成空 $$$_____temp_filelist.txt 文件;我修改为RunWait(@ComSpec & ' /c ' & 'dir "' & $sPath & $sFilter & '" /a:-d /b /s > ' & $sOUT, '', 0);写记录文件
_FileReadToArray($sOUT, $File_Array)放在窗口创建的前面,不使用 _FileSearchToArray 收到相同的效果,

内置函数用英版文档,替换所有函数及关键字的描述部分,耗时 58 分钟,刚做完,再去看看 htm 文件的效果。。。。

gdhwd 发表于 2011-5-28 20:12:17

很好很强大

qhd_yxm 发表于 2011-5-28 09:05:59

终于可以下载了

liyi-softs 发表于 2011-5-27 23:27:24

我要下载.........

131738 发表于 2011-5-27 22:43:19

回复131738


    我想我大概明白了~
afan 发表于 2011-5-27 22:34 http://autoitx.com/images/common/back.gif

谢谢!!!我看看。。。。

afan 发表于 2011-5-27 22:34:39

回复 1246# 131738


    我想我大概明白了~#AutoIt3Wrapper_Icon=E:\Icon_1.ico
#include <Array.au3>
#include <File.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region 英-汉数据数组
Global $Chinese
$Chinese = "Below is a complete list of the functions available in AutoIt"
$Chinese = "下面是 AutoIt 函数的完整列表"
$Chinese = "Calculates the absolute value of a number"
$Chinese = "计算数的绝对值"
$Chinese = "Calculates the arcCosine of a number"
$Chinese = "计算数的反余弦值"
$Chinese = "Registers an Adlib function"
$Chinese = "注册 Adlib 函数"
$Chinese = "Unregisters an adlib function"
$Chinese = "注销 Adlib 函数"
$Chinese = "Returns the ASCII code of a character"
$Chinese = "返回字符的 ASCII 码"
$Chinese = "Returns the unicode code of a character"
$Chinese = "返回字符的 Unicode 代码"
$Chinese = "Calculates the arcsine of a number"
$Chinese = "计算数的反正弦值"
$Chinese = "Assigns a variable by name with the data"
$Chinese = "给变量赋值"
$Chinese = "Calculates the arctangent of a number"
$Chinese = "计算数的反正切值"
$Chinese = "Changes the operation of various AutoIt functions/parameters"
$Chinese = "调整 Autoit 函数或参数的操作方式"
#EndRegion 英-汉数据数组
;_ArrayDisplay($Chinese,'Debug~~~')
# ==============================================================================

Global $BakDir = 'E:\htm备份\html\'
Global $LogFile = @ScriptDir & '\替换记录.txt'
Global $filesl ;拖入的文件数组
Global $File_Path, $File_Array
Global $A = "Calculates the absolute value of a number"
Global $B = "计算数的绝对值"
If FileExists(@ScriptDir & '\替换.ini') = 0 Then
        _FileCreate(@ScriptDir & '\替换.ini')
        IniWrite(@ScriptDir & '\替换.ini', "配置", "路径", "")
        ;IniWrite(@ScriptDir & '\替换.ini', "配置", "换码", "0")
Else
        $Path = IniRead(@ScriptDir & '\替换.ini', "配置", "路径", "0")
        ;$State = IniRead(@ScriptDir & '\替换.ini', "配置", "换码", "0")
EndIf

$Form1_1 = GUICreate("Form1", 633, 105, 2, 2, BitOR($WS_POPUP, $WS_BORDER), _
                BitOR($WS_EX_DLGMODALFRAME, $WS_EX_TOPMOST, $WS_EX_TOOLWINDOW, $WS_EX_ACCEPTFILES)) ;$WS_EX_ACCEPTFILES支持拖放
$Button1 = GUICtrlCreateButton("文 本 替 换", 520, 80, 105, 20)
$Button2 = GUICtrlCreateButton("编 码 替 换", 345, 80, 105, 20)
$Button3 = GUICtrlCreateButton("退       出", 170, 80, 105, 20)

$Label1 = GUICtrlCreateLabel("搜索字符", 5, 30, 52, 17)
$Label2 = GUICtrlCreateLabel("替换字符", 5, 57, 52, 17)
$Label3 = GUICtrlCreateLabel("文件地址", 5, 7, 52, 17)
$Label4 = GUICtrlCreateLabel("当前完成", 5, 85, 65, 17)

$Input3 = GUICtrlCreateInput($Path, 62, 5, 560, 17);输入文件路径
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
$Input1 = GUICtrlCreateInput("", 62, 28, 560, 20)
$Input2 = GUICtrlCreateInput("", 62, 56, 560, 20)
GUICtrlSetState(-1, $GUI_FOCUS)
$Input4 = GUICtrlCreateInput("0", 62, 85, 80, 12, 0x0800, 0)
GUISetState(@SW_SHOW)

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $GUI_EVENT_DROPPED ;拖入文件 MsgBox(0,0,$GUI_EVENT_DROPPED)=-13
                        Local $mouse = GUIGetCursorInfo($Form1_1);获取相对于 GUI 窗口的鼠标光标位置,返回包含光标信息的 5 元素数组
                        ;发送命令到指定控件,$mouse=光标下控件ID,'GetSelected'=返回编辑框选定的文本
                        Local $_str = ControlCommand($Form1_1, '', $mouse, 'GetSelected', '');返回拖放文件的完整路径+文件名
                        GUICtrlSetData($Input3, $_str);完整路径+文件名写入地址框
                Case $Button1 ;文本替换
                        _Replacement(GUICtrlRead($Input3)) ;_Abcdef();;读取路径作为传递的参数
                Case $Button2 ;编码替换
                        _format(GUICtrlRead($Input3));读取路径作为传递的参数
                Case $Button3 ;退出
                        Global $Path01 = GUICtrlRead($Input3)
                        ;Global $State0 = GUICtrlGetState($Button2)
                        ;If $State0 = 144 Then $State = 1;禁用=144 ,启用= 80 设置 0=启用1=禁用
                        If $Path01 = '' Then $State = 0
                        IniWrite(@ScriptDir & '\替换.ini', "配置", "路径", $Path01)
                        ;IniWrite(@ScriptDir & '\替换.ini', "配置", "换码", $State)
                        Exit
        EndSwitch
WEnd

Func _format($WorkDir) ;编码替换
        If $WorkDir = "" Or $WorkDir = "输入文件路径,或直接拖入文件" Then Return MsgBox(0, 0, "无路径!", 1)
        Local $szDrive, $szDir, $szFName, $szExt
        #Region 处理 目录文件 开始
        Local $File_Path2 = _PathSplit($WorkDir, $szDrive, $szDir, $szFName, $szExt);完整路径拆分
        Local $File = $File_Path2 & $File_Path2 & 'AutoIt3 TOC.hhc'
        Local $str = String(FileRead($File));返回表达式的字符串结果
        $str = StringRegExpReplace($str, '(?<=\w)%20(?=\w)', ' ')
        If Not @error And @extended > 0 Then
                FileMove($File, $File & '.bak');移动文件为备份文件
                FileWrite($File, $str)
        EndIf
        #EndRegion 处理 目录文件 开始
        Local $ts = TimerInit() ;返回一个时间戳(开始计算耗时)
        Local $File_Array = _FileSearchToArray($WorkDir, '*.htm') ;遍历搜索*.htm文件(包括子目录)到数组 $File_Array[$i]=完整路径+文件名 $i 从 1 开始循环
        If @error Then Return MsgBox(4096, '错误', '未搜索到文件 ')
        Local $FR, $thStr, $FLog1 = '', $FLog2 = '', $x1 = 0, $x2 = 0

        For $i = 1 To $File_Array
                $FR = String(FileRead($File_Array[$i]))

                Local $ChangeBj1 = 0, $ChangeBj2 = 0 ;修改标记
                $FR = StringRegExpReplace($FR, '(?i)(?<=h1>)Function Reference(?=</h1>)', '函 数 参 考')
                If Not @error And @extended > 0 Then $ChangeBj1 = 1
                $FR = StringRegExpReplace($FR, '(?i)(?<=b>)Parameters(?=</b>)', '参 数')
                If Not @error And @extended > 0 Then $ChangeBj1 = 1
                $FR = StringRegExpReplace($FR, '(?i)(?<=b>)Return Value(?=</b>)', '返 回 值')
                If Not @error And @extended > 0 Then $ChangeBj1 = 1
                $FR = StringRegExpReplace($FR, '(?i)(?<=b>)Remarks(?=</b>)', '备 注')
                If Not @error And @extended > 0 Then $ChangeBj1 = 1
                $FR = StringRegExpReplace($FR, '(?i)(?<=b>)Related(?=</b>)', '相 关 函 数')
                If Not @error And @extended > 0 Then $ChangeBj1 = 1
                $FR = StringRegExpReplace($FR, '(?i)(?<=b>)Example(?=</b>)', '函 数 示 例')
                If Not @error And @extended > 0 Then $ChangeBj1 = 1
                $FR = StringRegExpReplace($FR, '(?i)(?<=valign="top">)Success(?=:</td>)', '成 功')
                If Not @error And @extended > 0 Then $ChangeBj1 = 1
                $FR = StringRegExpReplace($FR, '(?i)(?<=valign="top">)Failure(?=:</td>)', '失 败')
                If Not @error And @extended > 0 Then $ChangeBj1 = 1
                $FR = StringRegExpReplace($FR, '(?i)(?<=h1>)Keyword Reference(?=</h1>)', '关 键 字 参 考')
                If Not @error And @extended > 0 Then $ChangeBj1 = 1
                $FR = StringRegExpReplace($FR, '(?i)(?<=b>)See Also(?=</b>)', '参 考 资 料')
                If Not @error And @extended > 0 Then $ChangeBj1 = 1
                $FR = StringRegExpReplace($FR, '(?i)(?<=b>)\(?=</b>)', '可选参数');b></b>
                If Not @error And @extended > 0 Then $ChangeBj1 = 1 ;b></b>
                $FR = StringRegExpReplace($FR, '(?i)(?<=">)Old(?=</th>)', '旧 名')
                If Not @error And @extended > 0 Then $ChangeBj1 = 1 ;      >Old</th>
                $FR = StringRegExpReplace($FR, '(?i)(?<=">)New(?=</th>)', '新 名')
                If Not @error And @extended > 0 Then $ChangeBj1 = 1 ;>New</th>
                $FR = StringRegExpReplace($FR, '(?i)(?<=">)Comments(?=</th>)', '注 解')
                If Not @error And @extended > 0 Then $ChangeBj1 = 1 ;>Comments</th>

                $FR = StringRegExpReplace($FR, '(?<=\s)Success:', '成 功:')
                If Not @error And @extended > 0 Then $ChangeBj1 = 1 ;>Comments</th>

                $FR = StringRegExpReplace($FR, '(?<=br>\h)Failure(?=:)', '失 败:');??????????????
                If Not @error And @extended > 0 Then $ChangeBj1 = 1 ;br>Failure:

                $FR = StringRegExpReplace($FR, '(?i)(?<=>)Returns 0.(?=</)', '返回 0.')
                If Not @error And @extended > 0 Then $ChangeBj1 = 1;>Returns 0.</

                $FR = StringRegExpReplace($FR, '(?<=b>)User Defined Function(?=</b>)', '用 户 定 义 函 数')
                If Not @error And @extended > 0 Then $ChangeBj1 = 1 ;b>User Defined Function</b>

                $FR = StringRegExpReplace($FR, '(?<=b>)Description(?=</b>)', '描 述')
                If Not @error And @extended > 0 Then $ChangeBj1 = 1 ;b>Description</b>

                $FR = StringRegExpReplace($FR, '(?<=\s)user defined functions Reference(?=</h1>)', '用户定义函数参考')
                If Not @error And @extended > 0 Then $ChangeBj1 = 1 ;user defined functions Reference</h1>

                $FR = StringRegExpReplace($FR, '(?<=p>)user defined functions Reference(?=\s)', '要使用它们,你需要添加语句:');????????????
                If Not @error And @extended > 0 Then $ChangeBj1 = 1 ;<p>When using them you need to add a

                $FR = StringRegExpReplace($FR, '(?<=p>)user defined functions Reference(?=.&nbsp;)', '下面是定义在 AutoIt 中的用户定义函数完整列表');???????????
                If Not @error And @extended > 0 Then $ChangeBj1 = 1 ;<p>Below is a complete list of the user defined functions available in AutoIt

                $FR = StringRegExpReplace($FR, '(?<=\s)Click on a user defined function name for a detailed description.(?=</p>)', '点击用户定义函数的名称查阅详细描述.')
                If Not @error And @extended > 0 Then $ChangeBj1 = 1 ;Click on a user defined function name for a detailed description.</p>

                If $ChangeBj1 Then ;有汉化字符
                        $FLog1 &= $File_Array[$i] & @CRLF ;做输出记录
                        $x1 += 1
                EndIf
                ;--------以上先替换这些基本汉化内容
                $thStr = StringRegExpReplace($FR, '(?<=charset=)iso-8859-1(?=")|(?<=charset=)Windows-1252(?=")', 'GB2312', 1)
                If Not @error And @extended > 0 Then ;有修改编码字符
                        $ChangeBj2 = 1
                        $FLog2 &= $File_Array[$i] & @CRLF ;做输出记录
                        $x2 += 1
                EndIf
                ;--------以上替换编码格式字符内容

                If $ChangeBj1 Or $ChangeBj2 Then ;有修改记录
                        FileMove($File_Array[$i], $BakDir & StringRegExpReplace($File_Array[$i], '.+?\\html\\', ''), 9) ;备份文件及目录结构
                        FileWrite($File_Array[$i], $thStr) ;创建ANSI格式文件
                        GUICtrlSetData($Input4, $x1 & ' - ' & $x2);实时显示修改数
                EndIf
        Next
        Local $te = Round(TimerDiff($ts))
        FileDelete($LogFile)
        Local $textOut = '耗时 ' & $te & ' 毫秒' & @CRLF & @CRLF
        If $FLog1 <> '' Then $textOut &= '汉化基本字符文件 ' & $x1 & ' 个,以下为记录:' & @CRLF & $FLog1 & @CRLF & @CRLF
        If $FLog2 <> '' Then $textOut &= '修改为GB2312 编码 ANSI格式的文件 ' & $x2 & ' 个,以下为记录:' & @CRLF & $FLog2 & @CRLF
        FileWrite($LogFile, $textOut)
        ShellExecute($LogFile)
        ;GUICtrlSetState($Button2, $GUI_DISABLE);禁用 编码转换 按钮
EndFunc   ;==>_format

Func _Replacement($WorkDir) ;文本替换
        If $WorkDir = "" Or $WorkDir = "输入文件路径,或直接拖入文件" Then Return MsgBox(0, 0, "无路径!", 1)
        GUICtrlSetData($Input4, "0");清空修改数

        ;遍历搜索*.htm文件(包括子目录)到数组 $File_Array[$i]=完整路径+文件名 $i 从 1 开始循环:
        Local $File_Array = _FileSearchToArray($WorkDir, '*.htm')
        ;_ArrayDisplay($File_Array)
        For $k = 0 To UBound($Chinese) - 1
                GUICtrlSetData($Input1, $Chinese[$k]);读入搜索字串到 $Input1
                GUICtrlSetData($Input2, $Chinese[$k]);读入替换字串到 $Input2
                Local $Count = 0
                For $i = 1 To $File_Array;+1
                        $retval = _ReplaceStringInFile($File_Array[$i], $Chinese[$k], $Chinese[$k], 0, 1);替换文本文件的字符串
                        If Not @error Then
                                $Count += $retval
                                GUICtrlSetData($Input4, $Count);实时显示修改数
                        EndIf
                Next
                MsgBox(0, 0, "完成。已替换 " & $Count & " 处。", 1)
                GUICtrlSetData($Input1, "")
                GUICtrlSetData($Input2, "")
        Next
        GUICtrlSetData($Input4, "替换完毕")
        MsgBox(0, 0, "替换完毕")
EndFunc   ;==>_Replacement

Func _FileSearchToArray($sPath, $sFilter = '*.*') ;遍历搜索*.htm文件(包括子目录)到数组
        If StringRight($sPath, 1) <> '\' Then $sPath &= '\' ;路径变量加 "\" 结尾
        If Not StringInStr(FileGetAttrib($sPath), 'D') Then Return SetError(1, 0, 0) ;无此目录,则返回错误
        If StringReplace($sFilter, ' ', '') = '' Then $sFilter = '*';文件类型变量为空,则变量='*'
        Local $sOUT = @ScriptDir & '\$$$_____temp_filelist.txt'
        FileClose(FileOpen($sOUT, 2));清空记录文本
        RunWait(@ComSpec & ' /c ' & 'dir "' & $sPath & $sFilter & '" /a:-d /b /s > ' & $sOUT, '', 0);写记录文件
        Local $FR = FileRead($sOUT);读记录文件
        FileDelete($sOUT);删除记录文件
        Local $afilelist = StringRegExp('1' & @CRLF & $FR, '\V+', 3);返回全局匹配的数组
        If @error Or UBound($afilelist) = 1 Then Return SetError(2, 0, 0) ;该目录无文件
        $afilelist = UBound($afilelist) - 1
        Return $afilelist
EndFunc   ;==>_FileSearchToArray
页: 230 231 232 233 234 235 236 237 238 239 [240] 241 242 243 244 245 246 247 248 249
查看完整版本: 更新 AutoIt v3.3.14.5 (2) 中文安装包