翻译文本替换
根据游戏引擎的不同,文本替换的时候处理的方式也不太一样,由于维语的特殊性,在翻译文本替换的时候会遇到各种坑,不要指望翻译文本整体替换完之后,编译游戏就是完美可用的了,具体的问题在维语等语种显示问题中有做过总结,可用先去了解一下,但是也不用太担心,做为一个负责任的SDK厂商,我们尽可能的为CP扫清一切由语言引起的文本替换障碍,通过我们不懈地努力,做了两方面的工作:
1、编辑了直接可用的文本显示插件;
2、翻译文本在线转换小工具;
4.1 文本插件
4.1.1 Unity 3D 文本显示插件
插件使用步骤:
1、导入package包;
2、在想对应的文本中选择Component;
3、选择相对于的方法;
插件下载地址:维语支持插件
package 说明:
1.将输入内容,通过string扩展方法ToWeiYu(),
对源字符串做转换。(可嵌套标签,针对u3d的四个标签做处理,
有其他自定义标签可以自行扩展)
2.ExtText 实现了文本自动换行,
设置rtl属性为true,就会对维语文本显示正常的换行效果,
ExtText脚本本来不做维语转换,维语转换用string扩展方法ToWeiYu()
4.1.2 Cocos 文本显示插件
COCOS 在显示维语时,我们推荐使用ALKATIP Basma Tom.ttf字体来进行显示,但此时会带来方向倒置,词语连接,换行,维语和其他语言混合时的语序问题等。为此我们做了一些工作来避免CP在同一个问题上重复捣腾(经验上来看,捣腾这个问题的时间一般为10-15天,但这个坑我们已经踩好了,使用我们的方法仅仅需要1小时左右)。如果你的游戏UI上显示的文本量较少,又不想踩坑,此时推荐使用系统字体来渲染维语。
系统字体的优缺点:
- 没有方向倒置,词语连接等问题出现
- 不能进行字型缓存
ttf 字体的优缺点
- 能进行字型缓存
- 有方向倒置,词语连接等问题
在决定使用何种方式时,如果 UI 上显示文本量较少,我们推荐使用系统字体; 如果 UI 上显示的文本量较多,特别是有长文本显示时,我们推荐使用 ttf 方式来进行渲染
4.1.2.1 TTF 字体 插件使用方法:
集成进自己的 cocos
项目中分为两个部分, 开发阶段的集成和打包阶段的集成
我们集成了一系列的处理方法到 fribidi.zip
(下载:http://oppzxlnxx.bkt.clouddn.com/fribidi_v1.0.zip) 中,解压后进行简单的设置即可
4.1.2.2 开发阶段的集成 [非必要步骤]
将 解压后的文件夹放到 cocos 软件安装目录下 2d
,3d
,base
等同级目录中, 然后在 2d/CCLabel.cpp
的 Label::setString(args....)
函数中进行调用,调用代码如下:
#include "fribidi/fribidi-uy-ex.h" // 这一行在CCLabel.cpp 顶部 include 进去
// 找到Label::setString 方法
void Label::setString(const std::string& text){
if (text.compare(_utf8Text)){
string ex = UyEx::toEx(text); // 本行和下一行为维语等实际调用函数
_utf8Text = UyEx::fribidi(ex); // 将原来的 _utf8Text = text 改为 _utf8Text = ex;
_contentDirty = true;
std::u32string utf32String;
if (StringUtils::UTF8ToUTF32(_utf8Text, utf32String)){
_utf32Text = utf32String;
}
}
}
插件引入截图如下:
开发阶段等集成已经完成
4.1.2.3 打包阶段等集成(以AndroidStudio
为例)[必要步骤]
在 Android Sdudio
中找到 cocos
库的引用位置(如:/Applications/CocosCreator.app/Contents/Resources/cocos2d-x/cocos
), 然后将解压的 fribidi
文件夹放到 2d
, base
等文件夹同级等目录中, 同在开发环境中集成一样,将处理代码集成到 2d/CCLabel.cpp
的 Label::setString
函数中, 之后还要修改项目的 Android.mk
文件
(与base
, 2d
等同级的 Android.mk
文件), 将如下代码集成到../external/*
等系列文件的后面
fribidi/fribidi.c \
fribidi/fribidi-arabic.c \
fribidi/fribidi-bidi-types.c \
fribidi/fribidi-bidi.c \
fribidi/fribidi-brackets.c \
fribidi/fribidi-char-sets-cap-rtl.c \
fribidi/fribidi-char-sets-cp1255.c \
fribidi/fribidi-char-sets-cp1256.c \
fribidi/fribidi-char-sets-iso8859-6.c \
fribidi/fribidi-char-sets-iso8859-8.c \
fribidi/fribidi-char-sets-utf8.c \
fribidi/fribidi-char-sets.c \
fribidi/fribidi-deprecated.c \
fribidi/fribidi-joining-types.c \
fribidi/fribidi-joining.c \
fribidi/fribidi-mirroring.c \
fribidi/fribidi-run.c \
fribidi/fribidi-shape.c \
fribidi/fribidi.c \
fribidi/fribidi-utf-util.cpp \
fribidi/fribidi-uy-ex.cpp \
具体操作过程如下:
4.1.2.4 注意事项
系统字体和TTF这两种方式只能选用一种方法,如果两种方法都使用,则会得到错误的显示结果
4.2 翻译文本在线转换小工具
http://uyex.badambiz.com/img 我们做了一个文本转换和验证工具 不确定的情况下 可以直接在上面验证
在不确定翻译文本显示是否正确的情况下,有如下三种方式去检查:
1、可以用我们提供的小工具 http://uyex.badambiz.com/img 在线对比检查;
2、截图让维语同学帮忙检查;
3、如果是短文本可以直接对比翻译文本,如果是一样的就是对的,否则就是错的;