|
AMX的Translator是为了插件在AMX中更好的支持多语言而在0.9.9版本中新添入的功能。引入Translator大大的方便了使用者将插件中的文字翻译成自己国家的语言。下面我来教大家如何使用Translator。
1、编程中的使用:
如果一个插件能够用translator翻译,这个插件必须对translator支持。想使用它,必须在代码的#include 队列中加入 #include <translator>。一点需要注意,#include <translator>必须加在#include 队列的最上方,例如:
正确的例子:
- #include <translator>
- #include <amxmod>
- #include <vexd_utilities>
复制代码
错误的例子:
- #include <amxmod>
- #include <translator> //这个放在了队列的第2行,不是最上方,会引起编译错误。
- #include <vexd_utilities>
复制代码
这样,Translator就被引入了。当然,这仅仅是被引入,您还需要作更具体的工作。
下面,我们来拿一个简单的程序Hello World做一个范例
首先,在plugin_init()过程中加入这样一行
- load_translations("hello_world")
复制代码
load_translations的作用是装载翻译文件,例如上述例子就是载入amx\lang\hello_world.txt翻译文件,于是本插件的翻译都需要调用hello_world.txt中的内容。
目前的源代码为:
- #include <translator>
- #include <amxmod>
- #include <amxmisc>
- plugin_init(){
- load_translations("hello_world")
- }
复制代码
这样,翻译的准备工作就做完了。细节工作开始。
翻译器的命令为
这里尤其需要注意的是玩家Index,这是个可选参数,但是很多人容易在这里犯错误。
如果在下列过程中使用_T进行翻译,玩家Index必须忽略,也就只写成_T("翻译内容"):
- register_plugin
- register_srvcmd
- register_clcmd
- register_concmd
复制代码
例如
- register_plugin(_T("Hello World"),"0.1","Example")
- register_concmd("hello","hello",ADMIN_CFG,_T("Say Hello world"))
复制代码
而且,_T不能用在register_concmd, register_clcmd, register_srvcmd的第一或第二个参数上,例如如下是错误的:
- register_concmd(_T("hello"),"hello")
- register_clcmd("hello",_T("hello"))
复制代码
如果在下列过程中使用_T,玩家Index可以忽略,也可以不忽略,不过建议忽略。
- client_print
- engclient_print
- console_print
- server_print
- show_hudmessage
- client_cmd
复制代码
例如:
- client_print(id,print_center,_T("Hello world"))
- client_print(id,print_chat,_T("Hello world",id)
- // Both OK
复制代码
如果在下列过程中使用_T,玩家Index一定不能忽略
- format
- copy
- add
- equal
- equali
复制代码
例如:
- new trs[33]
- format(trs,32,_T("Hello World",id))
复制代码
错误的例子:
- new trs[33]
- format(trs,32,_T("Hello World")) //忘记了输入玩家Index
复制代码
而且,在format, copy, add这三个函数中,_T不能用在“目的地参数上”,例如format的第一个参数叫做目的地参数,因为format是将处理好的字符串放置在format的第一个参数上,故称之为“目的地参数”。例如,如下是错误的:
- new trs[33]
- format(_T(trs,id),32,"Hello World")
复制代码
需要注意的主要是这么些,下面我们开始着手编写Hello World. Hello World的功能是将翻译好的Hello World显示到所有玩家的屏幕中央。为了能够显示Hello World,我们需要注册(创建)一个控制台命令。于是,我们在plugin_init()中加入这样一行:
- register_concmd("hello","d_hello",ADMIN_CFG,_T("Say Hello World"))
复制代码
这样,是要有ADMIN_CFG权限的管理员,在控制台中输入hello,就调用脚本中的d_hello过程。于是我们开始编写d_hello过程:
- public d_hello(id,level,cid){
- if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED
- client_print(0,print_center,_T("Hello World"))
- return PLUGIN_HANDLED
- }
复制代码
- if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED
复制代码
这行命令是检验调用该过程的人的权限的,与主题无关,不过我还是解释一下,这里需要程序员改动的只有一个地方,就是cid,后面的1,这个数字代表玩家在控制台输入命令后面的参数数目+1,例如插件编写者希望别人输如控制台命令的时候,命令后面带着3个参数,例如格式为 hello <参数1> <参数2> <参数3>, 那么这个数字就应该设置为4,这样,输入3个参数而且有足够权限的人就可以调用这个命令,如果他只输入了2个参数,就不能调用。这里设置为1,因为不需要后面有参数。
- client_print(0,print_center,_T("Hello World")
复制代码
这个是本插件最核心的部分了,client_print的格式是:client_print(玩家Index,显示位置,"显示内容")
显示位置有:print_center print_chat print_notify print_console几种,这里因为规定显示在屏幕中央,所以选择了print_center。玩家Index如果设置成0,就是向所有玩家显示,_T("Hello World") 这个就是调用翻译了。
所有程序如下:
- #include <translator>
- #include <amxmod>
- #include <amxmisc>
- plugin_init(){
- load_translations("hello_world")
- register_plugin(_T("Hello World"),"0.1","Example")
- register_concmd("hello","d_hello",ADMIN_CFG,_T("Say Hello World"))
- }
- public d_hello(id,level,cid){
- if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED
- client_print(0,print_center,_T("Hello World"))
- return PLUGIN_HANDLED
- }
复制代码
这样,Hello World脚本就编写完了。
下面进入第2步
2、翻译文件的创建。
还是以Hello World为例子。因为Hello World中调用的翻译文件是hello_world(由load_translations决定),所以,我们打开cstrike\addons\amx\lang文件夹,创建一个文件名为hello_world.txt的文件。
因为Hello World一共有2处需要翻译的地方,一处在register_concmd的"Say Hello World",另一处在register_plugin 和 client_print的 "Hello World",所以我们先在hello_world.txt中加入这两行,文件内容为:
"Say Hello World"
"Hello World"
于是,我们开始翻译。翻译的格式为:
- "需要翻译的内容"
- 语言符号1:"翻译的内容1"
- 语言符号2:"翻译的内容2"
- 语言符号3:"翻译的内容3"
- (......)
复制代码
由于我们使用的是中文,简体中文的语言符号是chs(ch代表中国,s代表简体),繁体中文的语言符号是ch,所以我们应加入chs:"翻译内容" 和 ch:"翻译的内容"。于是,翻译好的文件内容是:
"Say Hello World"
chs:"说 您好,世界"
ch:"f 您好,世界"
"Hello World"
chs:"您好,世界"
ch:"您好,世界"
这样,翻译文件就做好了,用UTF-8格式保存文本文件。大功告成。
3、在AMX中调整语言的方法。
在控制台中输入如下各式的命令:
amx_language 语言符号
例如 amx_language chs
这样,您的语言就被调整成了“简体中文”
我就教这写,如果我有表意不清,或者有打错的地方,请大家纠正,谢谢。 |
|