Unity3d实现阿拉伯语适配,不规则特殊字符的处理

Unity3D游戏开发,适配阿拉伯地区文本显示 最近在为了适配阿拉伯地区的文本显示,参考了几个资源商店内的免费资源处理了阿拉伯文本可以较好的处理阿拉伯文本 阿拉伯文本最大的特点就是语序都是从右到左,其中插入的数字和英文依然从右到左 处理的时候首先要吧左对齐的 文本改为右对齐 还有一些UI也需要注意,比如进度条也是从右到左 Arabic support 是最基础的阿语转化插件,现在能看到的大部分修改方法都是在这个基础上改的 使用也非常简单,直接调用脚本内FIX方法就可以把翻译好的阿拉伯文在text组件内正确显示了。 Arabic s 阅读详情

前言

最近做了阿拉伯语的语言适配。记录一些比较麻烦的点。其实我也没太明白具体和其他语言有什么不同,唯一听懂的就是他们的语序是从右往左的(比如“你好!”,他们的阅读顺序是“!好你”)大概是这样子,具体原理也有很多大神在解释。但可能我没天赋,看的懵懵懂懂索性不去过分理解了。直接用按大神分享的插件就好了。

插件

用了前辈们都推荐的插件Arabic Support for Unity,免费的。没什么可说的。就一句调用代码,demo里面都有。
AssetStore插件地址

使用&问题

这个插件能满足一般的翻译。引用了命名空间的话。一句就够了。

string result = ArabicFixer.Fix(text, false, false);

这能解决一部分问题。
但不巧的是我们的项目需要翻译的比较复杂。因为里面出现了比较多的特殊字符。比如某个约定为切分标记的特殊符号,或者替换标记({}),或者换行符(\n),或者颜色串({str})而且有的是在项目是拼接的颜色串({str})有的是直接在配置表里面配置的颜色串。(这个真是有点醉,因为你不能在输出多语言的时候直接翻译,还需要在项目具体位置拼接完再单独翻译。)
这种的话用这个翻译的就要炸了。
我尝试在翻译的插件里做一些忽略特殊字符之类操作,但因为没理解透彻。反复尝试都有问题。
只能在外部做判断。

下面贴两个比较常用的特殊字符处理方式。

 /// <summary>
        /// 包含换行特殊字符(\n)的处理,优先级高。主要针对多行文字
        /// </summary>
        /// <param name="Str"></param>
        /// <returns></returns>
        public static string ArabicWithRow(string Str)
        {
            Str = Str.Replace(" ", "");
            string[] Holder  = Str.Split('\n');

            string newStr = "";
            for (int i = 0; i < Holder.Length; i++)
            {
                if (Holder[i].Contains("color"))
                {
                    newStr += ArabicWithColor(Holder[i]);
                }
                else
                {
                    newStr += ArabicFixer.Fix(Holder[i], false, false);
                }
                if (i != Holder.Length-1) 
                {
                    newStr += "\n";                 
                }                          
            }
            return newStr;
        }


        /// <summary>
        /// 包含颜色特殊字符的处理优先级低
        /// </summary>
        /// <param name="Str"></param>
        /// <returns></returns>
        public static string ArabicWithColor(string Str)
        {
            Str = Str.Replace(" ", "");
            //根据<>切分
            string[] OldAry = Str.Split(new char[] { '<', '>' });
            //颜色栈
            Stack<string> ColorData = new Stack<string>();
            string tempString = "";
            //颜色部分都用*代替(切分符号)
            for (int i = 0; i < OldAry.Length; i++)
            {
            
                if (OldAry[i].Contains("color"))
                {
                    tempString += "*";
                    if (OldAry[i].Contains("#"))
                    {
                        ColorData.Push(OldAry[i]);
                    }
                }
                else
                {
                    tempString += OldAry[i];
                }
            }
            //翻译字符    
            tempString = ArabicFixer.Fix(tempString, false, false);
         	//通过*切分(切分符号)
            string[] arry = tempString.Split('*');
          
            string newstring = "";
            //拼接
            for (int i = 0; i < arry.Length; i++)
            {

                if (ColorData.Count != 0)
                {
                    if (i % 2 == 0)
                    {
                        newstring += (arry[i] + "<" + ColorData.Pop() + ">");
                    }
                    else
                    {
                        newstring += (arry[i] + "");
                    }
                }
                else
                {
                    if (i == arry.Length - 1)
                    {
                        newstring += (arry[i]);
                    }
                    else
                    {
                        newstring += (arry[i] + "");
                    }
                }
            }
            return newstring;
        }

总结

其实插件对一些特殊字符都是支持的,像\n或者“*”这种都是支持的。但有时候多个特殊字符连续在一起就有可能出错。
而颜色这种({str})不是很规则的字符。直接翻译必错。
所以如果有自己自定义的符号的话,可能需要单独做处理。
不过像这种外面拼接的话还是比较麻烦。有大神能直接改成支持这种字符就好了。

额外注意

切分符号不能出现在被切分的字符串中。
我在做字符拼接时用*切分。是因为我的项目字符串不包含*。如果出现需要切分的字符串里出现*,比如获得 狗崽子*1 这种,就会出问题。(所以标记切分符号的位置大家需要替换成自己项目里字符不包含的字符)
有人建议我在切分前做判断,比如包含*就用@来切分,那么同时包含@和*呢。同时包含@#¥%……&*这些呢,或者判断不包含*就用*切分,那么包含了怎么办?再判断有没有@,再判断有没有@#¥%&*()显然不太合适。
还建议大家约定好使用的特殊字符。

 

 

 

Unity3d实现阿拉伯语适配,不规则特殊字符的处理。 前言 最近做了阿拉伯语的语言适配。记录一些比较麻烦的点。其实我也没太明白具体和其他语言有什么不同,唯一听懂的就是他们的语序是从右往左的(比如“你好!”,他们的阅读顺序是“!好你”)大概是这样子,具体原理也有很多大神在解释。但可能我没天赋,看的懵懵懂懂索性不去过分理解了。直接用按大神分享的插件就好了。 插件 用了前辈们都推荐的插件Arabic Support for Unity,免费的。没什么可说的。就一句调用代码,demo里面都有。 AssetStore插件地址 使用&问题 这个插件能满足一般的翻译 阅读详情

相关推荐

Unity阿拉伯语支持全攻略:从RTL文本到UI镜像的实战解决方案

在游戏与应用开发中,多语言本地化是全球化战略的关键环节,其中文本渲染与UI适配是核心技术基础。其原理涉及字体引擎对复杂字形(如阿拉伯语连字)的解析、布局系统对从右至左(RTL)书写规则的支持,以及UI组件坐标与锚点的动态变换。这项技术的核心价值在于能为特定语言区域(如中东、北非市场)提供符合本地阅读习惯的原生体验,避免因布局错乱或文字乱码导致的用户体验下降。在应用场景上,它直接服务于需要集成阿拉伯语支持的Unity项目,涵盖游戏、教育应用及各类工具软件。本文聚焦于解决阿拉伯语支持中的核心痛点,系统介绍了如何

weixin_26841957的博客 275

unity 去除资源中的特殊字符

问题描述: 最近返现建模那边给的资源名包含一些#字符,导致加载AB时,报空的情况,一些模型资源名字包含一些特殊字符和很多空格. 在网上找了几个文章,都不是很适合,看整合了一下代码. 原因分析: 不知道啥原因 解决方案: 1.在编辑器里写一个扩展,自动检测资源名,删除特殊字符,空格. 在Project里面点击要操作的文件夹,然后调用扩展方法,把脚本放到Editor里面, [MenuItem("资源管理/去除Gameobject名字特殊字符")] public static void ReName()

中灰灰的博客 1873

Unity项目出海实战:搞定阿拉伯语适配,从TextMeshPro到UGUI的完整避坑指南

本文详细解析了Unity项目出海阿拉伯语适配的核心难点,提供从TextMeshPro到UGUI的完整解决方案。涵盖阿拉伯语RTL书写系统、字形变化规则及混排处理,推荐使用RTL TextMesh Pro插件和UGUI顶点变换技术,帮助开发者高效实现多语言支持,提升项目在中东市场的竞争力。

weixin_27033895的博客 372

Unity游戏ugui适配阿拉伯文本显示

阿拉伯文的读写规则与中文、英文等语言不同,前者是从右往左读的,后者是从左往右读的。而Unity自带的ugui的Text组件是按从左往右来显示的,当需要显示阿拉伯文时,就会导致字符显示顺序不对、自动换行时句序颠倒的问题。本文提供了Unity适配阿拉伯文的解决方案。

duxin121的博客 3061

Unity-support-Arabic-language-gameobject:Gameobject上免费支持统一教程的阿拉伯语

Unity-support-Arabic-language-gameobject:Gameobject上免费支持统一教程的阿拉伯语

Unity-support-Arabic-language:GUI上免费教程统一支持的阿拉伯语

Unity-support-Arabic-language:GUI上免费教程统一支持的阿拉伯语

Unity阿拉伯语的适配(终极版)

unity 阿拉伯语适配

weixin_42562717的博客 3634

xHCI驱动学习(1) 核心数据结构

虽然Linux内核拥有C语言构建的身体,但它骨子里散发的是面向对象的气质,这一个个的对象就是struct。面对一个内核模块的时候,首先要找出关键的struct和它们之间的关系,才能摸清代码的骨骼脉络。今天来理清USB xHCI相关的数据结构类型usb_hcd、xhci_hcd、hc_driver和全局变量xhci_pci_driver、xhci_hc_driver、xhci_pci_hc_driver之间的关系。

1万+

【亲测免费】 阿拉伯语支持Unity插件使用教程

阿拉伯语支持Unity插件使用教程 项目介绍 arabic-support-unity 是一个开源项目,旨在为Unity引擎提供准确的阿拉伯语文本支持。该插件支持阿拉伯语的特殊字符、连接性和排版规则,使得开发者能够在游戏或3D应用中正确显示阿拉伯语内容。 项目快速启动 安装步骤 克隆项目仓库: git clone https://github.com/Konash/arabic-support...

gitblog_00623的博客 1391

V.PhyloMaker实战:从物种列表到维管束植物系统发育树的完整流程

本文详细介绍了使用V.PhyloMaker工具包,从物种列表快速构建维管束植物系统发育树的完整实战流程。内容涵盖R包安装、物种名标准化、核心函数phylo.maker的三种构建方案选择、结果树的可视化与导出,以及与picante包的联动分析,为生态学和生物地理学研究提供了高效解决方案。

weixin_29057237的博客 374

InVEST模型实战指南:从水源涵养到热岛缓解的生态系统服务评估

本文提供了InVEST模型的实战指南,详细介绍了从环境搭建、数据预处理到核心模型应用的完整流程。通过水源涵养、碳存储、土壤保持和城市热岛缓解等核心模型的拆解,帮助生态学者与规划者系统量化评估生态系统服务,将复杂的生态价值转化为直观的空间数据与地图,为科学决策提供有力支撑。

weixin_29197051的博客 427

【亲测免费】 阿拉伯语支持Unity插件常见问题解决方案

阿拉伯语支持Unity插件常见问题解决方案 项目基础介绍 项目名称: arabic-support-unity 项目描述: 该插件允许您在游戏或3D应用程序中使用准确和正确的阿拉伯语文本。支持Tashkeel和印度数字,支持C#和JavaScript,并支持4个波斯字符。 主要编程语言: C# 新手使用注意事项及解决方案 1. 阿拉伯字母顺序问题 问题描述: 阿拉伯字母的阅读顺序与拉丁字母不同,可...

gitblog_00186的博客 655

STM32F103VET6实战:用W25Q64外部Flash实现Bootloader+Application双备份(含完整代码解析)

本文详细介绍了基于STM32F103VET6微控制器和W25Q64外部Flash实现Bootloader+Application双备份固件升级的完整方案。通过精心设计的Flash分区策略、可靠的Bootloader程序以及包含双重校验和自动回滚机制的升级流程,有效解决了远程升级过程中断电导致设备变砖的风险,确保了工业嵌入式系统的高可靠性与稳定性。

linux的博客 822

Arabic Support Unity 插件项目推荐

Arabic Support Unity 插件项目推荐 项目基础介绍和主要编程语言 Arabic Support Unity 是一个开源项目,旨在帮助开发者在 Unity 游戏中正确显示阿拉伯语文本。该项目主要使用 C# 编程语言,同时也支持 JavaScript。通过这个插件,开发者可以轻松地在游戏或 3D 应用程序中使用准确的阿拉伯语文本,解决了阿拉伯语在显示时常见的排序和连接问题。 项目核心...

gitblog_00957的博客 597

2.1 amdgpu BO的类型和用途

AMDGPU驱动中,amdgpu_bo_create_user和amdgpu_bo_create_kernel分别用于创建用户空间和内核空间的buffer对象(BO)。用户空间BO支持元数据、tiling flags等属性,由GEM handle管理生命周期;内核BO则用于驱动内部资源如ringbuffer,自动pin并可选CPU映射。二者在返回类型、生命周期管理和使用场景上存在根本差异,前者面向图形渲染/AI等应用,后者服务于驱动内部任务。

图形/计算GPU的驱动与虚拟化技术分享园地 2200

C# 工业上位机集成 YOLOv8 全实战:模型转换→相机取流→PLC 联动落地部署

// 检测结果实体类,工业场景扩展置信度、坐标、类别字段set;set;set;set;/// 模型配置常量,与导出参数保持一致// 置信度阈值// 非极大值抑制阈值public static readonly string[] ClassNames = { "物料", "缺陷", "挡板" };// 自定义类别本文完整实现了YOLO模型转换→C#上位机集成→工业相机对接→PLC联动→现场部署标准化模型转换流程,杜绝C#端兼容性问题;解耦相机取流、推理、UI线程,满足工业高稳定性要求;

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 318

Unity翻译工具(使用百度翻译)

有时候临时改了加了一些中文,然后多语言那边没有及时给到外包翻译,这时候拿个百度翻译做一下翻译,不过简单的翻译还是可以用的。 http://api.fanyi.baidu.com/api/trans/product/apidoc 这个是百度翻译api文档 代码里面必须要加appid和password(秘钥) 上面地址打开管理控制台就可以申请,是免费的 如下图,最下面是appid和秘钥 ...

SnoopyNa2Co3的博客 1万+

深度解析:Android开发工程师(嵌入式系统方向)职位 - 技术需求、面试准备与发展路径

本文深入分析了嵌入式Android开发工程师的岗位要求和技术内涵。该职位需要掌握C/C++、Linux系统编程、硬件接口等核心技术,能够进行Android系统底层定制开发,包括HAL层实现、Framework修改、性能优化等工作。文章详细解读了岗位职责,梳理了必备技术栈,提供了针对性的面试问题与参考答案,并探讨了职业发展路径。这类岗位要求开发者兼具软件工程能力和硬件基础知识,适合在智能电视、机顶盒、车载系统等嵌入式领域发展的技术人员。

郑伟强dev的专栏 132

【unity】游戏项目-多语言/本地化组件心得分享

针对i2等多语言本地化翻译插件的劣势,自行编写出一套简单易用的工具供日常使用

weixin_45218342的博客 669

液滴碰撞壁面的过程背景论文——bouncing反弹,spreading扩展,splashing飞溅。铺展过程介绍。还存在很多未解之谜。

【1993-德国-Phenomena of liquid drop impact on solid and liquid surfaces】液滴碰撞壁面的过程背景——bouncing反弹,spreading扩展,splashing飞溅。还存在很多未解之谜。还存在很多未解之谜。不同液滴形状碰撞过程。

qq_15963745的博客 197

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【Unity编辑器扩展】语言国际化工具,生成多语言Excel自动翻译并导出多语言表

多语言是个非常简单且常用的功能。但是重复工作量大,程序手动把多语言Key配置到多语言表经常会出现错漏,或者几经改版,有些Key已经不用却没有剔除,久而久之造成冗余。这中简单且重复的工作必须让工具来完成。

eFunTech 3648

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

[转]Untiy的阿拉伯文本适配

Unity Text的文本是左往右读,阿拉伯文的文本是右往左读。并且通过不Text组件的自动换行的时候会造成换行位置的不正确。用来给多行的阿拉伯文进行修正。之前提到过阿拉伯文字是右往左读的语言,如果直接适应Unity的自动换行,因为语序问题。阿拉伯文的文末将会变成最顶部的一行,而首部则会变成文本的后段。给文本框加上TextFixer,并且在EnterText输入阿拉伯文本,那在这个组件Start()的时候将会调用其方法进行换行的修正。校验后的文本将会变成从右外左的阅读顺序的阿拉伯语言文本。

小小姑娘 937

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

适配阿拉伯文镜像页面

我们国际业务的项目,支持多种语言切换的,是采用词条方式来做,即每个文案都是一个单独的词条变量,根据当前的所选的语言环境,渲染对应的语言文字,语言是在我们的后台管理系统中添加的 但是,最近我们需要新增阿拉伯语,扩展语种倒没啥,在后台新增一个就好了,主要的问题是排版, 阿拉伯人的网站都是镜像的,即是从右向左排版的,文字阅读也是从右向左。 当时以为要重新为这个语言版本单独写一套结构和样式,吓得我头发都掉了几根。。。 后面看了一些文档和参考了其他人的网站,发现其实有个属性可以统一翻转 实现 html dir 属性

laishaojiang的博客 5579

Arabic RTL格式 Git 资源

ArabicSupport git路径 https://github.com/Konash/arabic-support-unity RTLTMPro git路径 https://github.com/mnarimani/RTLTMPro

qq_34934849的博客 222

Unity初识之阿语显示

我在github上的总结 在某个文件中设置阿语的字符串,但是在设置文本的时候,直接取值显示会出错,需要对字符串进行修改显示。 在AssetsStore中使用一个免费的字符串插件: Arabic Support https://www.assetstore.unity3d.com/en/#!/content/2674 还有一个一直在加新功能,收费的: Easy Alphabet Arabic...

只爱艾薇儿 2252

Unity显示阿拉伯文字

1.下载RTLTMPro插件,并将其导入Unity工程中(\Assets)2.将TextMeshPro升级为2.1以上版本。

weixin_52744755的博客 569
上一篇: Unity 游戏计时
下一篇: Unity iOS使用ASTC格式纹理实践
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值