3DMGAME 3DM首页 新闻中心 前瞻 | 评测 游戏库 热门 | 最新 攻略中心 攻略 | 秘籍 下载中心 游戏 | 汉化 购买正版 论坛

注册 登录

QQ登录

只需一步,快速开始

查看: 4375|回复: 33
打印 上一主题 下一主题

[原创] 你想自己汉化mod吗?发布自助翻译程序,希望大家喜欢。

[复制链接]

33

主题

450

帖子

1467

积分

游戏狂人

Rank: 6Rank: 6

贡献度
226
金元
5527
积分
1467
精华
1
注册时间
2009-11-12
跳转到指定楼层
主题
发表于 2009-11-25 03:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本程序能自动提取你选的mod目录中需要汉化的英文字符串,在您汉化后可以自动
写到文件中。
第一步 选取目录
第二部 读取字串
第三部 翻译并写入表单
第四步 点汉化写入



下载地址:
http://d.namipan.com/d/0020055909c7120941913e5d944c8969785fb3ea43a20c00

附上软件源代码:

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <file.au3>
FileInstall("SkinCrafterDll.dll", @TempDir & "SkinCrafterDll.dll", 1)
FileInstall("Deka_ST.skf", @TempDir & "Deka_ST.skf", 1)
$Dll = DllOpen(@TempDir & "SkinCrafterDll.dll")
$Form1 = GUICreate("火炬之光自助汉化程序            By 菜鸟西门", 835, 498, 192, 114)
$ListView1 = GUICtrlCreateListView("待汉化内容|已汉化内容", 32, 96, 769, 265)
_SkinGUI(@TempDir & "SkinCrafterDll.dll", @TempDir & "Deka_ST.skf", $Form1)
_GUICtrlListView_SetExtendedListViewStyle($ListView1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES))
_GUICtrlListView_SetColumnWidth($ListView1, 0, 420)
_GUICtrlListView_SetColumnWidth($ListView1, 1, 360)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
$Button1 = GUICtrlCreateButton("写入列表", 296, 376, 193, 57)
$label = GUICtrlCreateLabel("                                                                                                ", 10, 5)
$Input1 = GUICtrlCreateInput("用鼠标点取表格中的未翻译字符,在这里写入翻译语句,然后点写入列表", 120, 448, 601, 26)
GUICtrlSetFont(-1, 12)
$Button3 = GUICtrlCreateButton("读取英文字符串", 502, 26, 129, 57)
$Input2 = GUICtrlCreateInput("请选择需要汉化的路径", 32, 38, 329, 21)
$Button4 = GUICtrlCreateButton("目录选择", 359, 36, 113, 25, 0)
$Button2 = GUICtrlCreateButton("汉化写入", 665, 26, 129, 57)
$Progress1 = GUICtrlCreateProgress(32, 70, 360, 15)
GUISetState(@SW_SHOW)
FileInstall("d:tldat.exe", @TempDir & "tldat.exe", 1)
Local $Index = 0
$ini = "翻译-" & @MON & "-" & @MDAY & "-" & @HOUR & @MIN & ".txt"
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Button4
                        $eng = FileSelectFolder('请选择需要汉化MOD内容的文件夹', '', 4)
                        GUICtrlSetData($Input2, $eng)
                        If $eng = "" Then
                                Exit
                        EndIf
                Case $Button3
                        GUICtrlSendMsg($ListView1, $LVM_DELETEALLITEMS, 0, 0)
                        FileDelete($ini)
                        getstring()
                Case $Button1
                        writestring()
                Case $Button2
                        writedata()

        EndSwitch
WEnd

Func getstring()

        $aFile = myFileListToArray($eng, ".(?i)dat$", 1, "GLOBALS.DAT.adm,massfile.dat.adm,BackUp,images")

        If IsArray($aFile) Then
                For $i = 1 To $aFile[0] Step 1
                        $ii = 100 / $i
                Next
                For $i = 1 To $aFile[0] Step 1
                        GUICtrlSetData($Progress1, $i * $ii)
                        Run(@TempDir & "tldat.exe " & '"' & $aFile[$i] & '"', "", @SW_HIDE)
                        GUICtrlSetData($label, "读取dat文件 " & $aFile[$i] & " 请稍候")
                Next
        EndIf
        GUICtrlSetData($label, "")

        $aFile = myFileListToArray($eng, ".(?i)adm$", 1, "GLOBALS.DAT.adm,massfile.dat.adm,BackUp,images")

        If IsArray($aFile) Then
                For $i = 1 To $aFile[0] Step 1
                        $ii = 100 / $i
                Next
                For $i = 1 To $aFile[0] Step 1
                        GUICtrlSetData($Progress1, $i * $ii)
                        RunWait(@TempDir & "tldat.exe " & '"' & $aFile[$i] & '"', "", @SW_HIDE)
                        Sleep(10)
                        GUICtrlSetData($label, "正在转换" & $aFile[$i] & " 为dat请稍候")
                        FileDelete($aFile[$i])
                Next
        EndIf
        GUICtrlSetData($label, "")

        $aFile = myFileListToArray($eng, ".(?i)dat$", 1, "已汉化目录,_private,BackUp,images")
        $key = 0
        If IsArray($aFile) Then
                For $i = 1 To $aFile[0] Step 1
                        $ii = 100 / $i
                Next
                For $i = 1 To $aFile[0] Step 1
                        GUICtrlSetData($Progress1, $i * $ii)
                        GUICtrlSetData($label, "正在提取字串" & $aFile[$i] & "  请稍候")
                        $line = _FileCountLines($aFile[$i])
                        For $x = 0 To $line
                                $fond = FileReadLine($aFile[$i], $x + 1)
                                $replace = StringInStr($fond, "<TRANSLATE>")
                                If $replace <> 0 Then
                                        $y = $x + 1
                                        $zc = StringSplit($fond, ":", 1)
                                        $hz = StringRegExp($zc[2], '[^x00-xff]+', 3);
                                        If @error <> 0 Then
                                                IniWrite($ini, "翻译这里", $key + 1, $zc[2])
                                                IniWrite($ini, "不要翻译", $key + 1, $zc[1] & "##" & $aFile[$i] & "##" & $y)
                                                $a = GUICtrlCreateListViewItem($key + 1 & " :  " & $zc[2], $ListView1)
                                                $key = $key + 1
                                        EndIf
                                EndIf
                        Next
                Next
        EndIf
        IniWrite($ini, "不要翻译", "总共行数", $key)
        GUICtrlSetData($label, "")
EndFunc   

Func writestring()

        $str = GUICtrlRead($Input1)
        _GUICtrlListView_AddSubItem($ListView1, $Index, $str, 1)
        _GUICtrlListView_AddSubItem($ListView1, $Index, $str, 0)
        IniWrite($ini, "翻译这里", $Index + 1, $str)

EndFunc  

Func writedata()
        $ipt2 = GUICtrlRead($Input2)
        DirCopy($ipt2, $ipt2 & "备份")
        Sleep(1000)
        $line = IniRead($ini, "不要翻译", "总共行数", "")
        $ii = 100 / $line
        For $i = 1 To $line
                GUICtrlSetData($Progress1, $i * $ii)
                $a = IniRead($ini, "不要翻译", $i, "")
                $b = IniRead($ini, "翻译这里", $i, "")
                $wfile = StringSplit($a, "##", 1)
                $g = $wfile[2]
                _FileWriteToLine($wfile[2], $wfile[3], $wfile[1] & ":" & $b, 1)
                $ans = FileRead($wfile[2])
                $var = StringToBinary($ans, 4)
                $var = BinaryToString($var, 4)
                $f = FileOpen($wfile[2], 34)
                FileWrite($f, $var)
                FileClose($f)
                GUICtrlSetData($label, "正在写入文件" & $wfile[2] & "  请稍候")
        Next
        GUICtrlSetData($label, "汉化已经完成")
        MsgBox(0, 0, "汉化已经完成,原始文件已经备份为" & $ipt2 & "备份  目录")
        Quit()
EndFunc

Func myFileListToArray($sPath, $rPath = 0, $iFlag = 0, $sPathExclude = 0)
        Local $asFileList[1]
        $asFileList = myFileListToArrayTemp($asFileList, $sPath, $rPath, $iFlag, $sPathExclude)
        Return $asFileList
EndFunc

Func myFileListToArrayTemp(ByRef $asFileList, $sPath, $rPath = 0, $iFlag = 0, $sPathExclude = 0)
        Local $hSearch, $sFile
        If Not FileExists($sPath) Then Return SetError(1, 1, "")
        If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, "")
        $hSearch = FileFindFirstFile($sPath & "*")
        If $hSearch = -1 Then Return SetError(4, 4, "")
        While 1
                $sFile = FileFindNextFile($hSearch)
                If @error Then
                        SetError(0)
                        ExitLoop
                EndIf
        
                If $sPathExclude And StringLen($sPathExclude) > 0 Then $sPathExclude = StringSplit($sPathExclude, ",")
                $bExclude = False
                If IsArray($sPathExclude) Then
                        For $ii = 1 To $sPathExclude[0] Step 1
                                If StringInStr($sPath & "" & $sFile, $sPathExclude[$ii]) Then
                                        $bExclude = True
                                        ExitLoop
                                EndIf
                        Next
                EndIf
                If $bExclude Then ContinueLoop

                Select
                        Case StringInStr(FileGetAttrib($sPath & "" & $sFile), "D")
                                Select
                                        Case $iFlag = 1
                                                myFileListToArrayTemp($asFileList, $sPath & "" & $sFile, $rPath, $iFlag, $sPathExclude)
                                                ContinueLoop
                                        Case $iFlag = 2 Or $iFlag = 0
                                                If $rPath Then
                                                        If Not StringRegExp($sPath & "" & $sFile, $rPath, 0) Then
                                                                myFileListToArrayTemp($asFileList, $sPath & "" & $sFile, $rPath, $iFlag, $sPathExclude)
                                                                ContinueLoop
                                                        Else
                                                                myFileListToArrayTemp($asFileList, $sPath & "" & $sFile, $rPath, $iFlag, $sPathExclude)
                                                        EndIf
                                                Else
                                                        myFileListToArrayTemp($asFileList, $sPath & "" & $sFile, $rPath, $iFlag, $sPathExclude)
                                                EndIf
                                EndSelect

                        Case Not StringInStr(FileGetAttrib($sPath & "" & $sFile), "D")
                                If $iFlag = 2 Then ContinueLoop
                                If $rPath And Not StringRegExp($sPath & "" & $sFile, $rPath, 0) Then ContinueLoop
                EndSelect

                ReDim $asFileList[UBound($asFileList) + 1]
                $asFileList[0] = $asFileList[0] + 1
                $asFileList[UBound($asFileList) - 1] = $sPath & "" & $sFile

        WEnd
        FileClose($hSearch)
        Return $asFileList
EndFunc  


Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE


Func WM_NOTIFY($hWndGUI, $MsgID, $WParam, $LParam)

        Local $tagNMHDR, $Event, $hWndFrom, $IDFrom
        Local $tagNMHDR = DllStructCreate("int;int;int", $LParam)
        If @error Then Return $GUI_RUNDEFMSG
        $IDFrom = DllStructGetData($tagNMHDR, 2)
        $Event = DllStructGetData($tagNMHDR, 3)
        $tagNMHDR = 0
        Switch $IDFrom

                Case $ListView1

                        Switch $Event

                                Case $NM_CLICK
                                        $Index = _GUICtrlListView_GetSelectedIndices($ListView1)
                                        If Not StringLen($Index) Then
                                                MsgBox(0, "", "未选定")
                                                Return
                                        EndIf
                                       
                                        $ipt = StringSplit(_GUICtrlListView_GetItemText($ListView1, Number($Index)), ":", 1)
                                        GUICtrlSetData($Input1, StringStripWS($ipt[2], 1))


                                Case $NM_DBLCLK

                                Case $NM_RCLICK
                       
                        EndSwitch

        EndSwitch

        Return $GUI_RUNDEFMSG
EndFunc  


Func _SkinGUI($SkincrafterDll, $SkincrafterSkin, $Handle)
        $Dll = DllOpen($SkincrafterDll)
        DllCall($Dll, "int:cdecl", "InitLicenKeys", "wstr", "1", "wstr", "", "wstr", "[email protected]", "wstr", "1")
        DllCall($Dll, "int:cdecl", "InitDecoration", "int", 1)
        DllCall($Dll, "int:cdecl", "LoadSkinFromFile", "wstr", $SkincrafterSkin)
        DllCall($Dll, "int:cdecl", "DecorateAs", "int", $Handle, "int", 25)
        DllCall($Dll, "int:cdecl", "ApplySkin")
EndFunc  

Func Quit()
        GUISetState(@SW_HIDE)
        DllCall($Dll, "int:cdecl", "DeInitDecoration")
        DllCall($Dll, "int:cdecl", "RemoveSkin")
        DllClose($Dll)
        FileDelete(@TempDir & "SkinCrafterDll.dll")
        FileDelete(@TempDir & "LEDWidget.skf")
        Exit
EndFunc

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

4

主题

809

帖子

1204

积分

游戏狂人

Rank: 6Rank: 6

贡献度
122
金元
7157
积分
1204
精华
0
注册时间
2009-3-31
舒服的沙发
发表于 2009-11-25 03:23 | 只看该作者
好强!这个要严重支持[em04]
回复 支持 反对

使用道具 举报

0

主题

356

帖子

388

积分

高级玩家

Rank: 4

贡献度
35
金元
2482
积分
388
精华
0
注册时间
2008-10-12
硬硬的板凳
发表于 2009-11-25 03:43 | 只看该作者
强帖留名。。。。。。
回复 支持 反对

使用道具 举报

5

主题

355

帖子

393

积分

高级玩家

Rank: 4

贡献度
53
金元
2406
积分
393
精华
0
注册时间
2009-10-28
QQ
冰凉的地板
发表于 2009-11-25 05:22 | 只看该作者
楼主的共享翻页箱子还没做出来啊。。
回复 支持 反对

使用道具 举报

0

主题

210

帖子

260

积分

高级玩家

Rank: 4

贡献度
43
金元
1478
积分
260
精华
0
注册时间
2009-10-29
5#
发表于 2009-11-25 06:38 | 只看该作者
[em57] [em57] 很强大  支持支持~
回复 支持 反对

使用道具 举报

39

主题

1万

帖子

2万

积分

版主

你爱,或者不爱我,我就在这里,不离不弃。

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

贡献度
4405
金元
27874
积分
25417
精华
1
注册时间
2006-10-27
6#
发表于 2009-11-25 07:00 | 只看该作者
强大啊..比上次发布的更方便..支持
回复 支持 反对

使用道具 举报

39

主题

1万

帖子

2万

积分

版主

你爱,或者不爱我,我就在这里,不离不弃。

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

贡献度
4405
金元
27874
积分
25417
精华
1
注册时间
2006-10-27
7#
发表于 2009-11-25 07:01 | 只看该作者
无法打开下载...换个下载方式吧..郁闷
回复 支持 反对

使用道具 举报

39

主题

1万

帖子

2万

积分

版主

你爱,或者不爱我,我就在这里,不离不弃。

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

贡献度
4405
金元
27874
积分
25417
精华
1
注册时间
2006-10-27
8#
发表于 2009-11-25 07:11 | 只看该作者
LZ能说明一下与上次发布的 MOD自动汉化正式版1.01.exe 有什么重大的区别吗?
改良版?还是另一种效果的版本?

还有,怎么也打不开下载啊,能不能换个QQ中转站下载呢
回复 支持 反对

使用道具 举报

33

主题

450

帖子

1467

积分

游戏狂人

Rank: 6Rank: 6

贡献度
226
金元
5527
积分
1467
精华
1
注册时间
2009-11-12
9#
 楼主| 发表于 2009-11-25 08:15 | 只看该作者
下载不了的qq中转地址<提取码   (提取码 d998d390)

这个是补遗程序,向手动汉化mod的或者是用了我那个自动汉化程序以后
未汉化的的新文件可以用这个汉化。
回复 支持 反对

使用道具 举报

0

主题

275

帖子

416

积分

高级玩家

Rank: 4

贡献度
37
金元
2684
积分
416
精华
0
注册时间
2009-3-28
10#
发表于 2009-11-25 08:24 | 只看该作者
好东西,支持一下。
回复 支持 反对

使用道具 举报

2

主题

1418

帖子

1488

积分

游戏狂人

Rank: 6Rank: 6

贡献度
23
金元
13959
积分
1488
精华
0
注册时间
2008-10-15
11#
发表于 2009-11-25 08:24 | 只看该作者
好啊。可以自己弄来 。谢谢分享
回复 支持 反对

使用道具 举报

4

主题

1304

帖子

1236

积分

游戏狂人

Rank: 6Rank: 6

贡献度
41
金元
10724
积分
1236
精华
0
注册时间
2008-3-18

G胖の微笑

12#
发表于 2009-11-25 08:45 | 只看该作者
强大啊....首页支持............
回复 支持 反对

使用道具 举报

70

主题

6699

帖子

5250

积分

游戏精英

Rank: 8Rank: 8

贡献度
304
金元
40339
积分
5250
精华
0
注册时间
2007-11-24
13#
发表于 2009-11-25 08:51 | 只看该作者
还是不错的嘛,谢谢
回复 支持 反对

使用道具 举报

0

主题

937

帖子

1000

积分

游戏狂人

Rank: 6Rank: 6

贡献度
69
金元
7241
积分
1000
精华
0
注册时间
2009-2-10
14#
发表于 2009-11-25 08:53 | 只看该作者
很强大[em01] [em01] [em01] [em01]
回复 支持 反对

使用道具 举报

15

主题

1565

帖子

1259

积分

游戏狂人

Rank: 6Rank: 6

贡献度
96
金元
8749
积分
1259
精华
0
注册时间
2008-12-17
15#
发表于 2009-11-25 08:57 | 只看该作者
那么好的东西,怎么可以不顶!![em04]
回复 支持 反对

使用道具 举报

0

主题

90

帖子

110

积分

中级玩家

Rank: 3Rank: 3

贡献度
17
金元
1020
积分
110
精华
0
注册时间
2008-1-30
16#
发表于 2009-11-25 09:02 | 只看该作者
LZ太强大了!!!!!!!!!
回复 支持 反对

使用道具 举报

0

主题

200

帖子

212

积分

中级玩家

Rank: 3Rank: 3

贡献度
9
金元
1755
积分
212
精华
0
注册时间
2009-4-22
17#
发表于 2009-11-25 09:14 | 只看该作者
好东西,一定要支持。
回复 支持 反对

使用道具 举报

0

主题

644

帖子

775

积分

超级玩家

Rank: 5Rank: 5

贡献度
68
金元
5026
积分
775
精华
0
注册时间
2008-11-6
18#
发表于 2009-11-25 09:22 | 只看该作者
这个好,结合自动汉化程序,汉化MOD就方便多了,谢谢LZ[em24]
回复 支持 反对

使用道具 举报

39

主题

1万

帖子

2万

积分

版主

你爱,或者不爱我,我就在这里,不离不弃。

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

贡献度
4405
金元
27874
积分
25417
精华
1
注册时间
2006-10-27
19#
发表于 2009-11-25 09:30 | 只看该作者
原帖由 dtooboss 于 2009-11-25 8:15:00 发表
下载不了的qq中转地址[code]http://31.dc.ftn.qq.com/ftn_handler/d72bfbaacf233c38df50cfed6cf53d06f137a664c4e8acfa6932849e3f141ed1adf49154a50e4ecacd99559b90b7d37b39c320cb932adbddf298094d37126e51/[/url][/url]火炬mod自

你的意思是,先用之前发布的 MOD自动汉化1.01程序 汉化一次后.如果还有未汉化的,再用这个 火炬MOD自助汉化 工具手动补充汉化是吗?
回复 支持 反对

使用道具 举报

13

主题

1551

帖子

2198

积分

游戏达人

Rank: 7Rank: 7Rank: 7

贡献度
283
金元
10660
积分
2198
精华
0
注册时间
2008-8-16
20#
发表于 2009-11-25 09:49 | 只看该作者
强大[em04] [em04]
回复 支持 反对

使用道具 举报

23

主题

4276

帖子

5618

积分

游戏精英

Rank: 8Rank: 8

贡献度
145
金元
50384
积分
5618
精华
0
注册时间
2008-10-11
QQ
21#
发表于 2009-11-25 11:03 | 只看该作者
这个要严重支持[em04]
回复 支持 反对

使用道具 举报

19

主题

249

帖子

347

积分

高级玩家

Rank: 4

贡献度
28
金元
2345
积分
347
精华
0
注册时间
2007-12-16
QQ
22#
发表于 2009-11-25 11:07 | 只看该作者
太强大了。。。。。。。。。。。。。。。。。。。。。。。[em54]
回复 支持 反对

使用道具 举报

12

主题

972

帖子

844

积分

超级玩家

Rank: 5Rank: 5

贡献度
18
金元
7721
积分
844
精华
0
注册时间
2009-3-23
23#
发表于 2009-11-25 11:30 | 只看该作者
很好 很强大~~~~~~
回复 支持 反对

使用道具 举报

11

主题

1136

帖子

1089

积分

游戏狂人

Rank: 6Rank: 6

贡献度
95
金元
7090
积分
1089
精华
0
注册时间
2009-4-27
24#
发表于 2009-11-25 11:41 | 只看该作者
这么好的东西确实要支持啊!!!!!
回复 支持 反对

使用道具 举报

2

主题

221

帖子

243

积分

中级玩家

Rank: 3Rank: 3

贡献度
28
金元
1912
积分
243
精华
0
注册时间
2008-2-21
25#
发表于 2009-11-25 11:47 | 只看该作者
很好很强大[em09]
回复 支持 反对

使用道具 举报

0

主题

70

帖子

89

积分

初级玩家

Rank: 2

贡献度
12
金元
1011
积分
89
精华
0
注册时间
2005-4-28
26#
发表于 2009-11-25 11:48 | 只看该作者
不錯喔 已經可以自己開發了
回复 支持 反对

使用道具 举报

31

主题

592

帖子

654

积分

超级玩家

Rank: 5Rank: 5

贡献度
60
金元
4137
积分
654
精华
0
注册时间
2009-6-30
27#
发表于 2009-11-25 17:20 | 只看该作者
具楼主说可以支持MOD新增的装备,看来很多很好的MOD都有望出全中文版的了[em04]
回复 支持 反对

使用道具 举报

0

主题

563

帖子

743

积分

超级玩家

Rank: 5Rank: 5

贡献度
115
金元
3429
积分
743
精华
0
注册时间
2009-11-11
28#
发表于 2009-11-25 17:27 | 只看该作者
[em15] [em15] 牛人~~~~~~~~~~~~~~~~
回复 支持 反对

使用道具 举报

4

主题

2939

帖子

5999

积分

游戏精英

Rank: 8Rank: 8

贡献度
255
金元
49786
积分
5999
精华
0
注册时间
2009-6-21
29#
发表于 2009-11-25 19:08 | 只看该作者
很好很强大[em57] [em57] [em57]
回复 支持 反对

使用道具 举报

0

主题

126

帖子

132

积分

中级玩家

Rank: 3Rank: 3

贡献度
25
金元
917
积分
132
精华
0
注册时间
2009-11-1
QQ
30#
发表于 2009-11-25 19:23 | 只看该作者
[em14] 这个是更新版?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|3DMGAME ( 京ICP备14006952号-1  沪公网安备 31011202006753号

GMT+8, 2025-2-26 05:36 , Processed in 0.127627 second(s), 15 queries , Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表