【Unity】本地化实现

个人向笔记。

1 前言

        记录一下自己的本地化实现思路,暂时只讲本文的本地化实现。

2 文本本地化方案-个人

        本地化实现是基于Luban的。自己使用Luban实现了一个“配置表模块”,又实现了一个“全局配置模块”,之后再基于这两个模块实现了“文本本地化模块”。

        首先,我会制作一个本地化文本的Excel表,表中会记录个各种文本,每条数据是一个文本数据,包含Id、说明描述、文本内容(分多字段:简体中文、英文...)。可以看到,我是把所有语言都放到一个表中了,会一起读入内存中,也有将不同语言分开存放,根据需要再读入内存,这种暂时不讨论。

        之后是模块初始化。系统首先会初始化“配置表模块”,读取Excel配置表到内存,并提供对外访问接口。之后系统初始化“全局配置模块”,从配置表中获取默认全局配置,并提供对外访问全局配置项的接口(这里实际就是属性)。然后初始化“文本本地化模块”,会在主线程中设置语言环境(Cultture Info),并注册语言切换事件,用于在切换语言时,修改主线程的语言环境;同时提供方法,让外界提供文本ID,方法返回本地化文本,方法会根据全局配置中的当前语言提供对应文本。PS:语言环境会影响一些系统数值,比如通过DateTime获取的星期几,就会分中英文。

        然后时项目中的应用。主要思想就是在相关脚本中,首先获取到各个Text对象,然后提供一个方法,用于根据Text Id通过“文本本地化模块”获取,在Awake中,调用此方法初始赋值,并注册语言切换事件,在切换语言时再次调用来赋值文本。但这个方法不太方便,因为涉及到Text的脚本较多,所以若以后有所代码修改,就需要在各个脚本中去修改,比较麻烦,所以这里提供第二种方法。创建一个脚本,此脚本会完成上面所讲的获取、注册事件、赋值文本的方法,并提供一个Public字段用于提供Text Id,然后将其挂在到具有Text组件的对象上即可,这样这个Text组件内容就可以实现本地化效果了,以后就算有代码修改也只需要在此脚本中修改即可,非常方便,而且本身也把文本本地化的实现进行了简化。

3 官方本地化插件

        也可以参考官方本地化插件“Localization”,直接在包管理器里搜索即可。

4 问题统计

4.1 语言长度问题

        同样的话,不同语言的文本长度时不一致的,有些UI在切换语言后就会出现文本出框的问题,对于此问题我暂时想到的解决方案大致如下,分几步走:

  1. 分层简化。比如有些文本在一个名为药水的分类窗口内,那么内部药水的命名就可以进行简化,由“XXX药水”→“XXX”。
  2. 修改用词。有些语句直接翻译会很长,那么我们可以看看有没有相关简写的词可用,或是换个说法但不改变其意思。
  3. Text组件设置。我一般是会设置水平与垂直为Wrap、Truncate,然后设置Best Fit属性来让文本自适应调整大小。
  4. 单独处理。若前三步都没法解决,直接针对处理调整。

我一般对所有本地化文本做1、2、3的操作,若还有问题,则进行4操作。

5 后记

        暂时这些。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/55359.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【移植】一种快速移植OpenHarmony Linux内核的方法

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ 持续更新中…… 移植概述 本文面向希望将 OpenHarmony 移植到三方芯片平台硬件的开…

基于Spring Boot+Vue的减肥健康管理系统设计和实现【原创】(BMI算法,协同过滤算法、图形化分析)

🎈系统亮点:图形化分析、BMI算法,协同过滤算法; 一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构:B/S架构 运行环境:win10/win11、jdk17 前端&#xff1a…

计算机网络-系分(5)

目录 计算机网络 DNS解析 DHCP动态主机配置协议 网络规划与设计 层次化网络设计 网络冗余设计 综合布线系统 1. 双栈技术 2. 隧道技术 3. 协议转换技术 其他网络技术 DAS(Direct Attached Storage,直连存储) NAS(Net…

Oracle RAC中停止has、crs、cluster的区别

1.首先介绍一下这3个服务 Has:是高可用服务,用在restart环境,可以是单机环境也可以是RAC环境,不管单机环境还是RAC环境,都可以执行crsctl check has,在RAC环境下,可以简单理解成cluster的一部分…

【Immich部署与访问】自托管媒体文件备份服务 Immich 本地化部署与远程访问存储数据

文章目录 前言1.关于Immich2.安装Docker3.本地部署Immich4.Immich体验5.安装cpolar内网穿透6.创建远程链接公网地址7.使用固定公网地址远程访问 前言 本篇文章介绍如何在本地搭建lmmich图片管理软件,并结合cpolar内网穿透实现公网远程访问到局域网内的lmmich&#…

【环境配置】科研小白Windows下安装Git

2024年小白使用Win10安装Git 2.46.2教程: 1 下载安装包 访问下载地址 Git - Downloading Package (git-scm.com) 下载之后打开文件 2 安装过程 点击Next 2.1 选择安装路径 2.2 选择勾选必要组件 2.3 一路Next 这一步直接Next即可 继续点击Next 继续点击Ne…

计数相关的题 Python 力扣

2284. 最多单词数的发件人 给你一个聊天记录,共包含 n 条信息。给你两个字符串数组 messages 和 senders ,其中 messages[i] 是 senders[i] 发出的一条 信息 。 一条 信息 是若干用单个空格连接的 单词 ,信息开头和结尾不会有多余空格。发件…

从零开始Hadoop集群环境搭建

目录 1. Centos7.5硬件配置1.1 创建虚拟机1.2 虚拟机系统设置 2. IP地址和主机名称配置3. 软件配置3.1 安装 epel-release3.2 卸载虚拟机自带的JDK3.3 克隆虚拟机3.4 修改克隆虚拟机的IP3.5 JDK安装3.6 Hadoop安装 4. Hadoop目录结构 1. Centos7.5硬件配置 1.1 创建虚拟机 1.2…

SpringBoot基础(三):Logback日志

SpringBoot基础系列文章 SpringBoot基础(一):快速入门 SpringBoot基础(二):配置文件详解 SpringBoot基础(三):Logback日志 目录 一、日志依赖二、日志格式1、记录日志2、默认输出格式3、springboot默认日志配置 三、日志级别1、基础设置2、…

基于SSM的坚果金融投资管理系统、坚果金融投资管理平台的设计与开发、智慧金融投资管理系统的设计与实现、坚果金融投资管理系统的设计与应用研究(源码+定制+开发)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

python爬虫 - 初识爬虫

🌈个人主页:https://blog.csdn.net/2401_86688088?typeblog 🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、爬虫的关键概念 (一)HTTP请求与响应 &#xff0…

Vue 3中的路由(Router)详解

在现代前端开发中,路由(Routing)是构建单页应用程序(SPA)的核心概念之一。他允许应用根据URL的变化动态地渲染不同的组件或页面。Vue.js提供了官方的路由管理工具——Vue Router。接下来这篇文章将逐步讲解Vue 3 中的路…

TypeScript高级内容

完整总结 本节课涵盖了本地开发环境的搭建、前后端的基本交互、以及如何封装 Axios 以增强代码的安全性和可维护性。此外,我们还解决了在代码实现过程中可能遇到的一些常见问题。 1. 本地环境搭建 安装环境依赖:首先需要在本地安装 Node.js&#xff0…

Linux安装virtualenvwrapper

workon 是 virtualenvwrapper 工具的一部分,用于管理 Python 虚拟环境。如果你看到这个错误,可能是因为 virtualenvwrapper 没有正确安装或配置。 解决步骤 安装 virtualenv 和 virtualenvwrapper 首先,确保你已经安装了 virtualenv 和 virt…

【Java数据结构】 链表

【本节目标】 1. ArrayList 的缺陷 2. 链表 3. 链表相关 oj题目 一. ArrayList的缺陷 上节课已经熟悉了ArrayList 的使用&#xff0c;并且进行了简单模拟实现。通过源码知道&#xff0c; ArrayList 底层使用数组来存储元素&#xff1a; public class ArrayList<E>…

二叉树进阶学习——从中序和后续遍历序列构建二叉树

1.题目解析 题目来源&#xff1a;106.从中序和后序遍历序列构造二叉树 测试用例 2.算法原理 后序遍历&#xff1a;按照左子树->右子树->根节点的顺序遍历二叉树&#xff0c;也就是说最末尾的节点是最上面的根节点 中序遍历&#xff1a;按照左子树->根节点->右子树…

一次解决Go编译问题的经过

用Go语言编写了一个小的项目&#xff0c;项目开发环境是在本地的Windows环境中&#xff0c;一切单元测试和集成测试通过后&#xff0c;计划将项目部署到VPS服务器上自动运行&#xff0c;但在服务器上执行go run运行时&#xff0c;程序没有任何响应和回显&#xff0c;甚至main函…

前端辅助工具分享(像素大厨)

引言&#xff1a; 我们在从事前端开发工作时&#xff0c;常会需要测量许多盒子的尺寸&#xff0c;颜色提取种种&#xff0c;切图&#xff0c;还有文字大小等信息&#xff0c;光从肉眼很难看出来&#xff0c;当然我们传统的会使用Photoshop来帮助我们完成这些工作&#xff0c;但…

【LuBase低代码框架】动态数据源服务介绍

功能介绍&#xff1a; 可以通过配置一个QueryOption对象或者一条select 查询语句&#xff0c;返回当前应用下的数据&#xff0c;避免后端写代码开发。 使用方法&#xff1a; 1. 动态服务需要通过/invoke/datasource和/invoke/datasourceNoRight 地址发起调用 2. 可使用参数…

工程师 - 什么是DRM

DRM 是数字版权管理&#xff08;Digital Rights Management&#xff09;的缩写&#xff0c;是一套用于控制数字内容&#xff08;如音乐、电影、电子书、软件和游戏&#xff09;的访问、共享和分发方式的技术和工具。DRM 的目标是防止未经授权复制、分发和修改受版权保护的数字资…