店小二nse吧 关注:55贴子:4,949
  • 16回复贴,共1

Firestorm的UI汉化……

只看楼主收藏回复

13年8月份做的工作,能记起多少是多少了
相对于看源码,这个汉化的工作还是蛮简单的,就是工作量大一点
有错的地方还望指正


IP属地:重庆1楼2015-05-21 12:06回复
    首先找到相关的文件,在软件安装目录下
    \skins\default\xui\
    里有一堆语言。
    en目录下是英文(English),也就是原始的,里面含有菜单的文字信息还有布局信息等
    zh目录下是中文,是汉化的。但是一般下载下来的都是繁体,而且不完全。你要有兴趣可以自己翻译
    在启动客户端的时候,我搞忘了是先加载en文件夹下的xml文件还是zh文件夹下的,但是最终的结果就是用zh中的去覆盖掉en的来实现汉化。
    比如一个菜单在en下它的配置信息对应是
    label="Edit"
    在zh目录下的配置信息是
    label="编辑"
    那最后显示出来的就是“编辑”


    IP属地:重庆2楼2015-05-21 12:14
    收起回复
      楼主电脑里放的是Firestorm4.2.2版本,有点早了,很久没用,所以也没更新过。不过大体的做法都是通用的
      首先先从en目录把xml文件拷过来。以前会有一些自带的翻译,但是从文件数目看,明显没有翻译完全。有空的话你可以选择从头全部自己翻译一遍

      刚才说过,加载时会把zh里的内容覆盖到en上去,所以在zh文件夹下就只要保留汉化的内容就可以了。各种布局信息,如果不更改可以删掉


      IP属地:重庆4楼2015-05-21 12:52
      回复
        以这个文件为例:floater_about_land.xml
        本文会总结哪些属性通常是表示可以翻译的,哪些属性是可以删除的,哪些是必须保留的

        原来是在en文件夹里,把它复制到zh文件夹后千万不要重命名。
        打开直接开始编辑。
        你会看见一堆东西,但是层级大致还是能看清楚的
        顶行的
        <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
        这个是版本编码信息,原样保留就好。
        最外面是一个<floater> </floater>
        中间包含了很多个<floater.string> </floater.string>
        你不需要知道这是什么意思,就把它当成括号的前半部分和后半部分就好了
        <floater>里可能还有一堆信息,像这样:
        <floater
        positioning="cascading"
        can_tear_off="false"
        height="425"
        layout="topleft"
        name="floaterland"
        help_topic="floaterland"
        save_rect="true"
        title="ABOUT LAND"
        width="490">
        可以看英文来猜测一下都是什么意思,
        在上面的height、layout、width等是布局信息,没必要改,所以直接删除就好了,因为刚才说过原来的en文件里也会有,所以不影响。
        name这一项只个菜单有汉化内容,那它就是必须保留的,系统会根据name的值来判断zh、en文件夹谁和谁对应,不然加载会出错。
        help_topic的值是要翻译的项
        最后保留的就成了
        <floater
        name="floaterland"
        help_topic="关于土地">
        你如果再多实验几次就知道这里的“关于土地”就是你在Firestorm中右键单击地面出来的菜单。
        这个菜单的大标题改好了,菜单里还有一堆按钮调整土地高度、贴图什么的,我就不截图了,继续往下会看见很多个<floater.string> </floater.string>比如这个:
        <floater.string
        name="Minutes">
        [MINUTES] minutes
        </floater.string>
        这种带string的能猜到就是字符相关。同样的,name值不能动,只能改minutes
        最后保留的是这样:
        <floater.string
        name="Minutes">
        [MINUTES] 分钟
        </floater.string>
        至于前面的 [MINUTES] 为什么会保留,因为你看这个东西又是大写,又是括号的怎么看都像是用来获取参数的啊。最后在菜单上显示出来的结果多半会是“5分钟”、“7分钟”这样。
        如果像这样的不知道怎么翻译的,可以保留在那里之后翻译,也可以直接把这整个<floater.string> </floater.string>给删除掉,因为中间没有其它的子键了。
        <floater.string
        name="maturity_icon_general">
        "Parcel_PG_Dark"
        </floater.string>
        这里需要注意一个基本的语法问题。你叫父子关系、上下级都行。例如在这个例子中<floater> 是在<floater.string>的外面,所以算是它的上一级,如果在<floater> 中没有需要汉化的,但是在<floater.string>有需要汉化的,那么作为父级的<floater>也得保留,也就是要保留<floater> 的name
        比如这样就是正确的:
        <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
        <floater name="floaterland">
        <floater.string
        name="Minutes">
        [MINUTES] 分钟
        </floater.string>
        </floater>
        这样就错了:
        <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
        <floater.string
        name="Minutes">
        [MINUTES] 分钟
        </floater.string>


        IP属地:重庆5楼2015-05-21 13:32
        回复
          关于里面涉及布局的值,这是当时实验出来的一些结果,打问号的表示我没闹明白:
          button元素下
          height 按钮的高(像素)
          width 按钮的宽(像素)
          left 表示按钮距离悬浮窗口左边的距离
          right 表示按钮距离悬浮窗口右边的距离
          follows 对齐方式?参考点?
          "right|top"时和left属性一起用
          "left|top"时和right属性一起用
          layout ?
          绝大多数情况下取值"topleft",极少情况下"bottomleft"
          top_pad 距离上面元素的距离(像素)
          left_pad ?
          备注:left、right实际取值为所赋初值模窗口宽度的值。例如按钮所在Floater窗口weight="320"时,按钮元素中left="-50"和left="270"效果一样


          IP属地:重庆6楼2015-05-21 13:37
          回复
            总结一下,一定需要保留的是name
            需要汉化的部分一般是带有topic、title、label(数量最多)字眼的值、夹在两个string之间的还有那种很长的一看就是描述性质的语句(因为变量名一般不会太长,就算有也有下划线"_"链接)。
            可以删除的是一些布局的信息,通常除了name值以外和你需要汉化的值,都可以删除。
            我发现的唯一的特例是在floater_about_land.xml这个文件里,还有一个value值不能删除。
            原来是这样:
            <combo_box.item
            label="Adult"
            name="item2"
            value="adult" />
            改完后是
            <combo_box.item
            label="成人"
            name="item2"
            value="adult" />
            不能是
            <combo_box.item
            label="成人"
            name="item2" />
            不然会提示错误

            那你就去499行代码找问题吧,一把在这里提示错误,说明是在这一行以上某个地方出了问题执行不下去了。


            IP属地:重庆7楼2015-05-21 13:55
            回复
              补充提醒:
              1、改完十几个文档后,先启动一下看看这个对应的菜单还能不能打开。如果出错了,就先去查一下错误吧。
              2、不知道菜单对应位置的,用上面提到过的,去在文件夹里的所有文档里搜索菜单的英文名字。通常能搜索到一个label值,然后找到对应的文件从en文件夹复制到zh文件夹,找到那一项汉化了就好


              IP属地:重庆8楼2015-05-21 13:59
              回复
                至于你们要汉化HUD什么的,我实在是无能为力了。
                要想去汉化别人物体上的脚本,这个更是天方夜谭,你得先和作者取得联系,弄到代码才行啊,这个和客户端毫无关系。
                以上↑
                暂时能想到的就是这些了,欢迎补充


                IP属地:重庆9楼2015-05-21 14:00
                回复
                  因为版本问题,可能每个版本的XML文件都有差异,建议找一个自己最常用,最稳定的版本去翻译


                  IP属地:重庆10楼2015-05-21 14:03
                  回复
                    谢谢小二!


                    11楼2015-09-08 12:15
                    收起回复