找回密码
 加入
搜索
查看: 10434|回复: 18

[系统综合] 诚心请教,如何让AU3编译的程序支持多语言?

 火.. [复制链接]
发表于 2012-10-6 11:43:13 | 显示全部楼层 |阅读模式
同时支持简体,繁体,及英文,应该如何实现呢?
发表于 2012-10-6 12:52:45 | 显示全部楼层
菜鸟前来围观,
1.检测当前系统语言
2.调用对应的语言文件
所以关键在于第二步。
见过好多程序用ini格式的文件来存储

[language = chineseCN]
file = 文件
[language = english]
file = file
只是举个例子
发表于 2012-10-6 12:53:40 | 显示全部楼层
可能需要用到正则表达式
发表于 2012-10-6 16:37:45 | 显示全部楼层
用unicode写,判断系统使用对应的转码方式
 楼主| 发表于 2012-10-6 23:43:04 | 显示全部楼层
请蛋蛋明示,或者能否给个示例呢
发表于 2012-10-7 00:25:07 | 显示全部楼层
没环境,写不了,大概思路而已
发表于 2012-10-7 02:15:29 | 显示全部楼层
本帖最后由 xayle 于 2012-10-7 02:19 编辑

需要在定义好一些关键字,然后读取对应语言的ini,改写这些关键字
语言文件需要保存为unicode格式才不会有乱码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2012-10-7 14:41:36 | 显示全部楼层
也可以用数据库形式来调用,ini也行,反正就是一个思路,ini见得比较多一点,Au3里面有INI的函数,可以直接调用
发表于 2012-10-7 15:10:29 | 显示全部楼层
本帖最后由 xayle 于 2012-10-7 15:12 编辑

这有个演示


#include <Array.au3>
#include <File.au3>
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
global $langdir = @scriptdir & "\lang\", $langlist, $local, $language, $OSLang

#Region ### START Koda GUI section ### Form=d:\aus\multiple languages\form1.kxf
$Form1 = GUICreate("", 300, 200)
$MenuItem1 = GUICtrlCreateMenu("&File")
$MenuItem2 = GUICtrlCreateMenu("&View")
$MenuItem3 = GUICtrlCreateMenu("&Help")
$MenuItem4 = GUICtrlCreateMenu("&About")
$Languages = GUICtrlCreateCombo("Languages", 8, 8, 100, 25, BitOR($CBS_DROPDOWNLIST, $WS_VSCROLL))
$Label1 = GUICtrlCreateLabel("Multiple Languages Test. Here is test content.", 8, 40, 280, 100)
$Label2 = GUICtrlCreateLabel("", 8, 152, 280, 120)
$Button1 = GUICtrlCreateButton("&Exit", 160, 6, 75, 24)
langcheck()
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Languages
                        if $language <> GUICtrlRead($Languages) then
                        $language = GUICtrlRead($Languages)
                        $local = langcheck(1,GUICtrlRead($Languages))
                        regui()
                endif
        Case $Button1
                Exit
        EndSwitch
WEnd

Func regui()
        WinSetTitle($Form1,"",t("Title"))
        GUICtrlSetData($MenuItem1, t("MENU_File_Label"))
        GUICtrlSetData($MenuItem2, t("MENU_View_Label"))
        GUICtrlSetData($MenuItem3, t("MENU_Help_Label"))
        GUICtrlSetData($MenuItem4, t("MENU_About_Label"))
        GUICtrlSetData($Label1, t("LABEL_Label1"))
        GUICtrlSetData($Button1, t("BUTTON_Exit"))
EndFunc

func t($t, $vars = "")
        $return = iniread($langdir & $local & ".ini", "X.GUI", $t, "")
        $return = stringreplace($return, "%n", @CRLF)
        $return = stringreplace($return, "%t", @TAB)
        for $i = 0 to ubound($vars)-1
                $return = stringreplace($return, "%s", $vars[$i], 1)
        next
        return $return
endfunc


Func langlist()
        $langstr = _FileListToArray($langdir, "*.ini")
        for $i = 0 to ubound($langstr) - 1
                $langlist &= stringtrimright($langstr[$i], 4) & "|"
        next
        GUICtrlSetData($Languages, $langlist, $language)        
EndFunc

Func langcheck($n=0,$nl="")
        $langsy = @OSLang
        $langstr = _FileListToArray($langdir, "*.ini")
        for $i = 1 to ubound($langstr) - 1
                $langna = iniread($langdir & $langstr[$i], "X.GUI", "Language", "")
                $langid = iniread($langdir & $langstr[$i], "X.GUI", "OSLang", "")
                $langlo = stringtrimright($langstr[$i], 4)
                If $n = 0 Then                        
                        If $langsy == $langid Then
                                $language = $langna
                                $local = $langlo
                                $OSLang = $langid
                                $Exist = 1
                        EndIf
                        $langlist &= $langna & "|"
                ElseIf $n = 1 Then
                        If $nl == $langna Then Return $langlo
                EndIf
        next
        If $OSLang = @OSLang Then
                regui()
                GUICtrlSetData($Label2, "Check Languages:" & $language)
        Else
                $local = "en-us"
                $language = "English"
                GUICtrlSetData($Label2, "Language file does not exist. default display in English.")
        EndIf
        GUICtrlSetData($Languages, "")
        GUICtrlSetData($Languages, $langlist, $language)
EndFunc


上面的检测不到语言文件会显示默认的界面


语言文件存放在.\lang\下面
英文可以用ANSI编码, 其他语言建议用Unicode编码, 这样不会产生乱码.
en-us.ini
[X.GUI]
Language="English"
OSLang="0409"
Title="Multiple Languages Test"
MENU_File_Label="&File"
MENU_View_Label="&View"
MENU_Help_Label="&Help"
MENU_About_Label="&About"
LABEL_Label1="This privacy statement applies to Microsoft.com and Microsoft websites, services and products that collect data and display these terms, as well as their offline product support services."
BUTTON_Exit = "&Exit"
zh-cn.ini
[X.GUI]
Language="简体中文"
OSLang="0804"
Title="多国语言测试"
MENU_File_Label="文件(&F)"
MENU_View_Label="查看(&V)"
MENU_Help_Label="帮助(&H)"
MENU_About_Label="关于(&A)"
LABEL_Label1="此隐私声明适用于收集并显示这些条款的 Microsoft 网站、服务和产品,及其脱机产品支持服务。"
BUTTON_Exit = "退出(&E)"
zh-tw.ini
[X.GUI]
Language="繁體中文"
OSLang="0404"
Title="多國語言測試"
MENU_File_Label="檔案(&F)"
MENU_View_Label="視圖(&V)"
MENU_Help_Label="幫助(&H)"
MENU_About_Label="關於(&A)"
LABEL_Label1="此隱私權聲明適用於收集並顯示這些條款的 Microsoft 網站、服務和產品,及其脫機產品支援服務。"
BUTTON_Exit = "退出(&E)"

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 +20 收起 理由
xiehuahere + 20 鼓励分享!

查看全部评分

发表于 2012-10-8 23:12:07 | 显示全部楼层
来看看思路,其实全用英文写不就得了。
发表于 2012-10-9 08:21:04 | 显示全部楼层
学习学习
发表于 2012-10-9 10:33:05 | 显示全部楼层
可以参考 SciTE Jump 源代码(本论坛也有),里面有多国语言的实现。
发表于 2012-10-10 10:36:51 | 显示全部楼层
特来学习一下。
发表于 2012-10-10 14:54:46 | 显示全部楼层
没有作品,所以无需多国语言。
路过记号,谢谢看到了源码!
发表于 2012-10-10 21:02:38 | 显示全部楼层
9楼的代码厉害啊,学习了~~
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-18 17:11 , Processed in 0.101044 second(s), 29 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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