- 阅读权限
- 100
- 最后登录
- 2009-8-30
- 积分
- 406
- UID
- 18
- 帖子
- 103
- 主题
- 0
- 精华
- 3
- 声望
- 406
- 荣誉
- 3
- 金币
- 100 G
- HP
- 0
- MP
- 0
- 注册时间
- 2007-3-18

- 声望
- 406
- 荣誉
- 3
- 金币
- 100 G
- HP
- 0
- MP
- 0
- 注册时间
- 2007-3-18
|
今日凌晨时候, 有某个家伙汉化 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 的地址, 有疑问的也可上来发发贴询问. 这样才能逐渐提高自己, 减少插件汉化和编写的错误. |
-
|