注册 |登录

CWDG-中国魔兽世界插件开发者社区论坛技术讨论版 › 查看主题

1724

查看

2

回复
返回列表

Rank: 16

声望
406  
荣誉
3  
金币
100 G 
HP
0  
MP
0  
注册时间
2007-3-18 
go

[插件] 汉化插件请注意, 画蛇添足要不得

1#
发表于 2007-6-23 10:54 | 只看该作者 | 倒序看帖 | 打印
今日凌晨时候, 有某个家伙汉化 ElkBuffBars (EBBs), 和我交流, 问我如何修改其显示的字体. 因为原插件不能显示中文字体.

经过阅读源程序 (ElkBuffBars.lua), 发现涉及字体代码段如下:
...
["iconcountfont"]                = "Arial Narrow",                                                                        -- <SML:font>
...
["textTLfont"]                        = "Friz Quadrata TT",                                                                -- <SML:font>
...

此时发现插件源代码中并无字体文件的定义.
再在插件所有目录搜索文本 “SetFont” 无任何结果, 由此确定, 字体设置是通过 Ace 某库的功能, 读取字体配置而自动调用.

经排查, 找出 ElkBuffBars 调用 Ace 库代码:
ElkBuffBars = AceLibrary("AceAddon-2.0"):new("AceConsole-2.0", "AceDB-2.0", "AceEvent-2.0", "FuBarPlugin-2.0")

在 AceWiki 发现调用的 ShareMedia-1.0 插件含有字体的设置功能, 功能如下:
Predefined data

The following data is predefined inside the library. There is no need to define it again yourself. (default handle)

MediaType FONT

Arial Narrow             Fonts\\ARIALN.TTF
Friz Quadrata TT         Fonts\\FRIZQT__.TTF
Morpheus                 Fonts\\MORPHEUS.TTF
Skurri                   Fonts\\SKURRI.TTF

查看此库代码发现如下字段:
        if GetLocale() == "koKR" then
                mediaTable["font"]["Arial Narrow"] = "Fonts\\2002B.TTF"
                mediaTable["font"]["Friz Quadrata TT"] = "Fonts\\2002.TTF"
                mediaTable["font"]["Morpheus"] = "Fonts\\K_Damage.TTF"
                mediaTable["font"]["Skurri"] = "Fonts\\K_Pagetext.TTF"
        elseif GetLocale() == "zhTW" then
                -- Add 5 more system fonts which can display chinese to mediaTable.
                mediaTable["font"]["任務"] = "Fonts\\FZBWJW.TTF"
                mediaTable["font"]["傷害數字"] = "Fonts\\FZJZJW.TTF"
                mediaTable["font"]["預設"] = "Fonts\\FZLBJW.TTF"
                mediaTable["font"]["提示訊息"] = "Fonts\\FZXHJW.TTF"
                mediaTable["font"]["聊天"] = "Fonts\\FZXHLJW.TTF"
        end

判定是调用 ShareMedia 库时, 可使用 “” 等字串调用其内定字体, 做到与系统无关, 因此汉化时由于将字体名称都汉化了, ShareMedia 没有找到相应的字体文件. 因此出现本文开头的现象.

现修改代码如下:
        if GetLocale() == "koKR" then
                mediaTable["font"]["Arial Narrow"] = "Fonts\\2002B.TTF"
                mediaTable["font"]["Friz Quadrata TT"] = "Fonts\\2002.TTF"
                mediaTable["font"]["Morpheus"] = "Fonts\\K_Damage.TTF"
                mediaTable["font"]["Skurri"] = "Fonts\\K_Pagetext.TTF"
        elseif GetLocale() == "zhCN" then
                -- Add 5 more system fonts which can display chinese to mediaTable.
                mediaTable["font"]["Arial Narrow"] = "Fonts\\FZXHLJW.TTF"
                mediaTable["font"]["Friz Quadrata TT"] = "Fonts\\FZXHLJW.TTF"
                mediaTable["font"]["Morpheus"] = "Fonts\\FZJZJW.TTF"
                mediaTable["font"]["Skurri"] = "Fonts\\FZBWJW.TTF"
                mediaTable["font"]["任务字体"] = "Fonts\\FZBWJW.TTF"
                mediaTable["font"]["伤害字体"] = "Fonts\\FZJZJW.TTF"
                mediaTable["font"]["默认字体"] = "Fonts\\FZLBJW.TTF"
                mediaTable["font"]["提示字体"] = "Fonts\\FZXHJW.TTF"
                mediaTable["font"]["聊天字体"] = "Fonts\\FZXHLJW.TTF"
        elseif GetLocale() == "zhTW" then
                -- Add 5 more system fonts which can display chinese to mediaTable.
                mediaTable["font"]["Arial Narrow"] = "Fonts\\FZXHLJW.TTF"
                mediaTable["font"]["Friz Quadrata TT"] = "Fonts\\FZXHLJW.TTF"
                mediaTable["font"]["Morpheus"] = "Fonts\\FZJZJW.TTF"
                mediaTable["font"]["Skurri"] = "Fonts\\FZBWJW.TTF"
                mediaTable["font"]["任務"] = "Fonts\\FZBWJW.TTF"
                mediaTable["font"]["傷害數字"] = "Fonts\\FZJZJW.TTF"
                mediaTable["font"]["預設"] = "Fonts\\FZLBJW.TTF"
                mediaTable["font"]["提示訊息"] = "Fonts\\FZXHJW.TTF"
                mediaTable["font"]["聊天"] = "Fonts\\FZXHLJW.TTF"
        end


使得在调用 ShareMediaLib 的插件中, 调用字体的原英文插件可以使用汉字字库, 而中文汉化或编写时候, 也可直接使用对应中文名称.

此库汉化作者确实非常认真, 连这点小小的地方都进行汉化, 足见其的热忱和细致, 同时由于过度的汉化, 使得某些功能被删除或改变, 结果起了反效果.

因此, 希望大家在汉化过程中, 尤其是对 Ace 库等核心调用的汉化中, 再认真细致一些, 阅读一下插件的代码和所使用的库的功能, Ace 的地址, 有疑问的也可上来发发贴询问. 这样才能逐渐提高自己, 减少插件汉化和编写的错误.
    • simonw: 好的经验总结.荣誉 + 1

TOP

Rank: 8Rank: 8

声望
128  
荣誉
2  
金币
1 G 
HP
0  
MP
0  
注册时间
2007-5-11 
2#
发表于 2007-7-6 17:01 | 只看该作者
谢谢昏鱼,又给我上了一课,收获颇丰

TOP

Rank: 48Rank: 48Rank: 48

声望
957  
荣誉
47  
金币
116 G 
HP
5  
MP
115  
注册时间
2007-4-17 
3#
发表于 2007-7-12 12:07 | 只看该作者
终于了解,为啥有人说我的插件GUI打开报Font Not Set 了。多谢昏鱼了。

TOP

CWDG首页 ( 京ICP备06068223号)|联系我们

GMT+8, 2010-9-9 10:25, Processed in 0.015280 second(s), 7 queries, Gzip On.

Powered by Discuz! X1

© 2001-2010 Comsenz Inc.