【Unity 实用工具篇】| 游戏多语言解决方案,官方插件Localization 实现本地化及多种语言切换
- 前言
- 【Unity 实用工具篇】| 游戏多语言解决方案,官方插件Localization 实现本地化及多种语言切换
- 一、多语言本地化插件 Localization
- 1.1 介绍
- 1.2 效果展示
- 1.3 使用说明
- 二、 插件导入并配置
- 2.1 安装 Localization
- 2.2 全局配置
- 三、多语言映射表
- 3.1 创建多语言文本配置表
- 3.2 添加多语言文本配置表内容
- 3.3 静态文本
- 3.2 动态文本
- 四、资源多语言映射表
- 五、映射表 导入/导出 Excel 便于管理
- 5.1 导出Localization Table为CSV
- 5.2 修改Excel中并重新导入
- 六、Build
- 总结
前言
- Unity的多语言本地化是一个很实用的功能,它可以帮助游戏支持多种语言,让不同语言的玩家都能够更好地体验游戏。
- 而实现本地化的方案也有很多种,各个方案之间也各有优劣,后面也会对多个方案进行介绍学习。
- 本文就来介绍一个专门作用于多语言本地化的Unity官方插件:
Localization
。 - 这个插件方便进行游戏的多语言本地化,让游戏支持多种语言,下面就来看看该插件的使用方法吧!
【Unity 实用工具篇】| 游戏多语言解决方案,官方插件Localization 实现本地化及多种语言切换
一、多语言本地化插件 Localization
1.1 介绍
Localization
是Unity官方推出的本地化插件,它可以帮助开发者在Unity项目中实现多语言支持。
在Unity中,Localization的工作原理是创建多个表格来存储不同语言的不同字符串。
可以通过Localization Tables创建这些表格,表格可以建立不同资源之间的对应关系,一个key对应多个语言的资源。
通过使用Localization插件,开发者可以方便地设置和获取当前语言和当前语言地区,从而为游戏或应用程序提供多种语言的支持。
这对于那些需要面向不同地区和不同语言的用户发布游戏或应用程序的开发者来说是非常有用的。
1.2 效果展示
1.3 使用说明
官方文档:官方文档
本文使用的Localization版本为1.4.5,Unity引擎版本为2023.1.9。
后续插件可能会有更新,或者使用老版本的插件时功能使用上可能会有所不同,实际使用时按照自己的版本要求即可。
二、 插件导入并配置
2.1 安装 Localization
打开菜单栏 Window -> Package Manager
,在搜索框中搜索Localization 并进行安装即可。
要注意Packages选择Unity Registry,不然可能搜不到该插件哦。
2.2 全局配置
打开菜单栏 Edit -> Project Settings -> Localization -> Create
,找到Localization,点击Create创建,并选择一个文件目录进行文件保存。
点击 Locale Generator
搜索zh和en添加中英文配置,第一次添加时会让我们选择一个文件夹目录保存。
Locale Generator 用于添加或移出语言,每添加一种语言也会生成对应的配置文件,然后可以修改默认语言为中文,如下图所示:
三、多语言映射表
3.1 创建多语言文本配置表
打开菜单栏 Window -> Asset Management -> Localization Tables
,点击New Table Collection创建表格。
该表格用于建立不同资源之间的对应关系,一个key对应多个语言的资源,可以选择创建文本表或者资源表。
这里我们选择文本表(String Table Collection)使用,写好表名后点击Create就可以创建了,然后选择一个路径目录进行保存。
经过上面几个配置后可以在我们前面保存文件的路径下看到相关的文件,这里最好是根据自己的情况选择合适的文件夹进行管理保存。
3.2 添加多语言文本配置表内容
此时在Localization Tables中添加多语言文本即可,配置内容主要是Key和对应多种语言的文本。
可通过Window -> Asset Management -> Localization Tables
打开该窗口。
实际项目中不一定将多语言内容全部写在一个配置表中,不同的文本内容也可以通过创建多个配置表进行填写,让不同的模块自己管理文本内容也是一个不错的选择。
3.3 静态文本
此时在场景中添加一个文本组件Text,然后在该组件右侧菜单处点击Localize
,会自动添加一个Localize String Event
组件。
(这里也可以手动在下面添加Localize String Event
组件,不过还要手动配置该组件绑定的Text组件,稍微麻烦一些,功能都是一样的)
此时在该组件中的String Reference参数中选择之前配置的多语言文本配置表中的Key即可完成多语言的配置。
此时运行程序,可以看到该Text组件的文本内容已经变成我们配置多语言文本配置表中的Key对应的文本了。
通过Game视图右上角的语言选择可以切换语种,点击切换不同语言后,Game视图中的文本也会即时的跟着切换了。
这样我们的静态文本就可以通过这种方法来添加多语言文本配置表中的Key绑定多语言了。
也可以通过脚本控制语言的切换,测试代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Localization;
using UnityEngine.Localization.Settings;
using UnityEngine.ResourceManagement.AsyncOperations;public class LanguageManager : MonoBehaviour
{AsyncOperationHandle m_InitializeOperation;private Locale _chineseLocale;private Locale _englishLocale;void Start(){// SelectedLocaleAsync will ensure that the locales have been initialized and a locale has been selected.m_InitializeOperation = LocalizationSettings.SelectedLocaleAsync;if (m_InitializeOperation.IsDone){InitializeCompleted(m_InitializeOperation);}else{m_InitializeOperation.Completed += InitializeCompleted;}}void InitializeCompleted(AsyncOperationHandle obj){var locales = LocalizationSettings.AvailableLocales.Locales;for (int i = 0; i < locales.Count; ++i){var locale = locales[i];if (locale.LocaleName == "Chinese (Simplified) (zh)"){_chineseLocale = locale;}else if (locale.LocaleName == "English (en)"){_englishLocale = locale;}}}public void SwitchChinese(){LocalizationSettings.Instance.SetSelectedLocale(_chineseLocale);}public void SwitchEnglish(){LocalizationSettings.Instance.SetSelectedLocale(_englishLocale);}
}
将该脚本挂载到场景中,并在场景中添加两个Button分别绑定切换中英文的方法即可。
上述脚本代码也可以换成下方这种,更简单粗暴的方法切换语言。
using UnityEngine;
using UnityEngine.Localization.Settings;public class LanguageManager : MonoBehaviour
{public void SwitchChinese(){LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.Locales[0];}public void SwitchEnglish(){LocalizationSettings.SelectedLocale = LocalizationSettings.AvailableLocales.Locales[1];}
}
索引值为Localization 的配置项中的多种语言的顺序,如下方第一个语言为中文则索引为0。
3.2 动态文本
除了可以设置静态文本,也可以在代码中获取对应的文本并进行动态设置,下面看一下动态文本的设置方法。
设置动态文本的方法有很多种,可以看情况选择,具体原理可以在官方文档仔细查阅,这里就直接写几种方法的使用示例。
1.最简单粗暴的方法,直接动态读表赋值。
using UnityEngine;
using UnityEngine.Localization.Settings;
using UnityEngine.UI;public class TestLocalization : MonoBehaviour
{public Text text;void Start(){var loadingResult = LocalizationSettings.StringDatabase.GetTableEntry("UITestTable", "ui_Test");text.text = loadingResult.Entry.GetLocalizedString();}
}
GetTableEntry()
第一个参数为多语言配置表的名字,第二个参数为该表里面的Key。
通过方法传入多语言配置表的名字及对应多语言的Key即可完成动态文本赋值。
不过要注意的是字符串表可能不会立即可用,例如在本地化系统初始化期间或尚未加载表时。
为了保险起见,可以确保该多语言配置表被加载出之后再进行赋值,可以来看第二种方法的使用示例。
2.等待语言配置表初始化之后在赋值。
using System.Collections;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine;
using UnityEngine.Localization.Settings;
using UnityEngine.UI;public class TestLocalization : MonoBehaviour
{public Text text;void Start(){StartCoroutine(LoadStrings());}IEnumerator LoadStrings(){// A string table may not be immediately available such as during initialization of the localization system or when a table has not been loaded yet.var loadingOperation = LocalizationSettings.StringDatabase.GetTableAsync("UITestTable");yield return loadingOperation;if (loadingOperation.Status == AsyncOperationStatus.Succeeded){var stringTable = loadingOperation.Result;text.text = stringTable.GetEntry("ui_Test").GetLocalizedString();}else{Debug.LogError("Could not load String Table\n" + loadingOperation.OperationException.ToString());}}
}
3.初始化时获得该多语言配置表,事件动态更新文本。
using UnityEngine;
using UnityEngine.Localization;
using UnityEngine.Localization.Tables;
using UnityEngine.UI;public class Demo : MonoBehaviour
{public Text Name;private LocalizedStringTable stringTable = new LocalizedStringTable { TableReference = "UITestTable" };void OnEnable(){stringTable.TableChanged += LoadStrings;}void OnDisable(){stringTable.TableChanged -= LoadStrings;}void LoadStrings(StringTable stringTable){Name.text = GetLocalizedString(stringTable, "ui_Test");}static string GetLocalizedString(StringTable table, string entryName){var entry = table.GetEntry(entryName);return entry.GetLocalizedString();}
}
以上几种方法都可以正常使用,根据实际需求选择合适的即可。
四、资源多语言映射表
除了上面说到的文本的本地化之外,Localization 还支持资源本地化,使用方法与配置文本的方法类似,下面来看一下。
打开菜单栏 Window -> Asset Management -> Localization Tables
,点击New Table Collection创建表格。
该表格用于建立不同资源之间的对应关系,一个key对应多个语言的资源,这里选择创建一个资源配置表(AssetsTable Collection),写好表名后点击Create就可以创建了,然后选择一个路径目录进行保存。
创建完之后与文本配置的处理方式一样,在表中添加Key以及资源的内容,测试示例如下:
然后在场景中添加一个Image组件,在右侧菜单点击Localize(或者自己添加组件),选择我们添加的资源配置表中的Key即可完成。
效果如下,可以使用方法控制切换语言,也可以通过右上角进行切换。
五、映射表 导入/导出 Excel 便于管理
当项目中的文本量比较多的时候,使用Localization Table的方法会有些难以操作不便于管理。
所以此时可以考虑将Localization Table导出为Excel表格对文本进行管理,Localization 是支持Table的导入和导出的,下面来看一下怎样操作。
5.1 导出Localization Table为CSV
打开Localization Tables,然后右键Localization Table,选择 Export -> CSV...
导出。
选择一个文件目录进行保存,就可以看到导出的Excel表格内容了,就是Localization Table中的内容。
5.2 修改Excel中并重新导入
在导出的Excel表格中我们可以进行增删改查的操作对表格进行管理,这样比直接在Localization Table中管理要轻松的多。
修改完之后可以在导入Localization Table中,要注意的是修改完之后要改成UTF-8的编码格式
再保存文件,不然导入之后中文会显示乱码。
如果不知道怎么直接保存为UTF-8的编码格式,可以使用Notepad++等工具转一下就可以了。
点击Import -> CSV...
选择对应的文件进行导入。
这样就可以看到从Excel中修改后的内容导入到Localization Table中啦。
乱码问题:https://blog.csdn.net/shishuijun/article/details/129961436
六、Build
如果需要打包项目的话还需要对Localization Tables进行Build一次,方法也很简单,下面看一下怎样操作。
打开菜单栏 Window -> Asset Management -> Addressables -> Groups
。
然后在该窗口中选择Build -> New Build -> Defaul Build Script
进行Build,等待Build完成即可。
总结
Localization
工具的优点在于该插件是Unity引擎原生解决方案,使用时只需要通过Package Manger导入即可。- 导入及配置都比较简单,对于一些文本量不是很大的项目来说,该方案非常的合适。
- 当项目对文本量需求非常大的时候,就需要配合Excel来管理了。
- 整理来说效果不错,操作简单易上手,基本功能都有,是值得学习的一款多语言本地化解决方案。
🎁🎁🎁 最后给大家推荐一个功能齐全而且很好用的 IP代理网站:IPIDEA
使用这个代理IP,可以很轻松地访问被封锁的网站,避免被追踪和监控,保护自己的隐私和安全。而且这个代理IP还可以帮助我们加速网页的加载速度,提高工作效率。
现在使用这个链接(https://share.ipidea.net/YYYYYY)注册的新用户还可以直接白嫖最少300M的流量,注册认证后最高可以送7.5G流量哦!
加上最近年终也有活动,优惠力度还是蛮大的,有需要的小伙伴可以去搞一下试试,注册 == 白嫖
。
如果对此非常感兴趣之前没有用过或者不会使用的小伙伴也不用着急,在官网都有详细的教程可以看,后面有时间的话也可以出一期教程帮助大家快速上手使用的哦!
🎬 博客主页:https://xiaoy.blog.csdn.net
🎥 本文由 呆呆敲代码的小Y 原创 🙉
🎄 学习专栏推荐:Unity系统学习专栏
🌲 游戏制作专栏推荐:游戏制作
🌲Unity实战100例专栏推荐:Unity 实战100例 教程
🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📆 未来很长,值得我们全力奔赴更美好的生活✨
------------------❤️分割线❤️-------------------------
相关文章:
【Unity 实用工具篇】| 游戏多语言解决方案,官方插件Localization 实现本地化及多种语言切换
前言 【Unity 实用工具篇】| 游戏多语言解决方案,官方插件Localization 实现本地化及多种语言切换一、多语言本地化插件 Localization1.1 介绍1.2 效果展示1.3 使用说明 二、 插件导入并配置2.1 安装 Localization2.2 全局配置 三、多语言映射表3.1 创建多语言文本配…...
疯狂SQL转换系列- SQL for Tencent Cloud VectorDB
为了尽量保证使用者通过统一的SQL标准访问各类型数据库,我们这里开启了“疯狂SQL转换系列”。转换的语法效果不一定是最好的,更多是为用户提供一个统一的数据库交互体验。转换数据库目标的确认更多是内生的。基于我们对业务发展的需要。该向量库SQL转换的…...
Excel中的INDIRECT函数用法
当在 Excel 中使用 INDIRECT 函数时,它可以帮助我们通过引用字符串中的单元格地址来获取对应单元格的值。这个函数非常有用,特别是在需要动态地引用其他单元格的情况下。下面是 INDIRECT 函数的一些用法和示例: 基本用法: INDIREC…...
Spring-temp
IOC/DI实现步骤 1.配置元数据 2.实例化IOC 3.获取Bean 基于XML配置方式 管理组件 1.基于构造函数:有参、无参 2.基于静态工厂方法:有参、无参 依赖注入 1.构造函数 2.setter方法 Bean组件高级特性 1.作用域 2.生命周期 FactoryBean 基于注解 IOC Bean作…...
【C++干货铺】会搜索的二叉树(BSTree)
个人主页点击直达:小白不是程序媛 C系列专栏:C干货铺 代码仓库:Gitee 目录 前言: 二叉搜索树 二叉搜索树概念 二叉搜索树操作 二叉搜索树的查找 二叉搜索树的插入 二叉搜索树元素的删除 二叉搜索树的实现 BSTree结点 …...
【Spring AOP】 动态代理
一.AOP常见的实现方式 1.Spring AOP 2.aspectJ 注意:spring使用的是aspectJ的注解,但实现是spring自身实现的. 二.AOP原理 Spirng AOP原理 , 基于动态代理实现的. 三.代理模式 作用就是提供一个代理类,让我们在调用目标方法的时候,不再是直接对目标方法进行调用,而是通过代理类…...
NAT——网络地址转换
目录 一、概念 二、NAT的分类 1.静态NAT 1.1 静态NAT的配置 1.2 利用eNSP小实验加强对静态NAT的理解 2、动态NAT 三、NAPT——端口映射 四、Easy IP 使用一个公网地址可以让所有人都上公网 一、概念 随着Internet的发展和网络应用的增多,IPv4地址枯竭已经成为…...
Lambda 表达式的常见用法
文章目录 Lambda 表达式的常见用法使用Lambda表达式集合遍历使用Lambda表达式排序使用Lambda表达式过滤使用Lambda表达式映射使用Lambda表达式归约使用Lambda表达式分组使用Lambda表达式函数式接口的实现使用Lambda表达式线程的创建使用Lambda表达式进行Optional 操作使用Lambd…...
成本管理常用的ChatGPT通用提示词模板
成本分析:如何进行成本分析? 成本核算:如何进行成本核算? 成本控制:如何控制成本? 成本效益分析:如何进行成本效益分析? 成本预测:如何预测成本? 成本决…...
如何在PHP中处理日期和时间?
在 PHP 中,你可以使用内置的 DateTime 类和相关函数来处理日期和时间。以下是一些常见的日期和时间操作的示例: 使用 DateTime 类: 获取当前日期和时间: $currentDateTime new DateTime(); echo $currentDateTime->format(Y-…...
NO-IOT翻频,什么是翻频,电信为什么翻频
1.1 翻频迁移最终的目的就是减少网络的相互干扰,提供使用质量. 1.2 随着与日俱增的网络规模的扩大,网内干扰已成了影响网络的质量标准之一,为了保障电信上网体验,满足用户日益增长的网速需求,更好的服务客户,电信针对…...
云原生之深入解析OOM和CPU节流
一、前言 使用 Kubernetes 时,内存不足 (OOM) 错误和 CPU 节流是云应用程序中资源处理的主要难题,这是为什么呢?云应用程序中的 CPU 和内存要求变得越来越重要,因为它们与云成本直接相关。通过 limits 和 requests ,可…...
数据结构与算法之递归: LeetCode 93. 复原 IP 地址 (Typescript版)
复原 IP 地址 https://leetcode.cn/problems/restore-ip-addresses/ 描述 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。 例如:“0.1.2.201” 和 “192.…...
json模块与jsonpath详解
数据提取之JSON与JsonPATH JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。 JSON和XML的比较可谓不…...
ubuntu20.04在noetic下编译orbslam2
ubuntu20.04在noetic下编译orbslam2 参考链接1:https://blog.csdn.net/qq_58869016/article/details/128660588 参考链接2:https://blog.csdn.net/dong123456789e/article/details/129693837 在noetic下的安装环境 1.库安装 sudo apt-get update sudo …...
64. 最小路径和
最小路径和 描述 : 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 题目 : LeetCode 64.最小路径和 64. 最小路径和 解析 : class So…...
惰性加载函数(js的问题)
在web开发中,因为浏览器之间的实现差异,一些嗅探工作总是不可避免。 var addEvent function( elem, type, handler ){if ( window.addEventListener ){return elem.addEventListener( type, handler, false );}if ( window.attachEvent ){return elem.…...
jmeter,读取CSV文件数据的循环控制
1、构造csv数据 保存文件时需要注意文件的编码格式 id,name,limit,status,address,start_time 100,小米100,1000,1,某某会展中心101,2023/8/20 14:20 101,小米101,1001,1,某某会展中心102,2023/8/21 14:20 2、在线程组下添加【CSV数据文件设置】元件 3、CSV文件数据的循环控…...
移植LVGL到像素屏,从此玩转像素屏0门槛
硬件方面 先上渲染图 实物图 配置 主控:esp32 micro32 plus主频:240MhzFlash:8MPSRAM:2M 软件方面 众所周知,LVGL是一个十分优秀的图形框架,小到几百kb的单片机,大到Linux都可以运行。既然它…...
stateflow 之图函数、simulink函数和matlab函数使用及案例分析
目录 前言 1. 图函数graph function 2.simulink function 3.matlab function 4.调用stateflow中的几种函数方式 前言 对于stateflow实际上可以做simulink和matlab的所有任务,可以有matlab的m语言,也可以有simulink的模块,关于几种函数在…...
C# 加载本地文件设置应用程序图标
static class Program{[STAThread]static void Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Form mainForm new Form1();mainForm.Show();//IntPtr hProcess Process.GetCurrentProcess().MainWindowHandle;// 设置应用程…...
苹果计划将全球1/4的IPhone产能转移至印度
KlipC报道:据相关人士报道,苹果希望在未来2到3年内每年在印度生产超过5000万部iphone,要是该计划得以实现,印度将占领全球iPhone产量的四分之一。 KlipC的分析师Alex Su表示:“此次iPhone15推出是苹果印度制造计划的一…...
el-date-picker 选择一个或多个日期
el-date-picker可选择多个日期 type“dates” 加个s即可 <div><span>el-date-picker选择多个日期</span><el-date-pickertype"dates"v-model"dateList"placeholder"选择一个或多个日期"></el-date-picker></di…...
5个创建在线帮助文档的好方法!
在线帮助文档是企业为用户提供支持服务的重要工具,它能够帮助用户更好地了解和使用产品,提高用户体验。然而,创建一份优秀的在线帮助文档需要掌握一定的技巧和方法。接下来就介绍一下创建在线帮助文档的5个好方法,帮助企业更好地为…...
听GPT 讲Rust源代码--src/tools(14)
File: rust/src/tools/rust-analyzer/crates/cfg/src/lib.rs 在Rust源代码中,rust/src/tools/rust-analyzer/crates/cfg/src/lib.rs这个文件是Rust语言分析器(Rust Analyzer)的一部分,用于处理和管理条件编译指令(Cond…...
arcgis api for js 中使用API的代理页面(跨越配置)
以下仅作为自己阅读官网api的对reques的理解做的备忘笔记。一知半解,仅供参考。 1、获取或者构建第三方代理 官网解释:代理在其自己的 Web 服务器上安装并运行,而不是在 Esri 服务器或安装了 ArcGIS Enterprise 的计算机上安装和运行&#…...
Unity_FairyGUI发布导入Unity编辑器资源报错
Unity_FairyGUI发布导入Unity编辑器资源报错 报错: FairyGUI: settings for Assets/UI/XMUI/XMSubway_atlas0.png is wrong! Correct values are: (Generate Mip Mapsunchecked) UnityEngine.Debug:LogWarning (object) FairyGUI.UIPackage:LoadAtlas (FairyGUI.P…...
1.5【应用开发】缓冲区(二)
二,附加缓冲区 你可以通过分别调用以下函数来附加一个缓冲区(screen_buffer_t类型),以将其与像素图、流或窗口相关联: screen_attach_pixmap_buffer() //用于附加像素图缓冲区 screen_attach_stream_buffers()//用于附加流缓冲区 screen_attach_window_buffers()屏幕附加…...
RTMP流设置超时时间失败
使用FFmpeg(版本是5.0.3)将rtmp流作为输入,设置超时时间(使用-timeout参数),结果报错:Cannot open Connection tcp://XXX:1935?listen&listen_timeout 通过./ffmpeg -help full 命令查看FFmpeg帮助&am…...
如何一步步让MySQL支撑亿级流量
1 主从读写分离 大部分互联网业务都是读多写少,因此优先考虑DB如何支撑更高查询数,首先就需要区分读、写流量,这才方便针对读流量单独扩展,即主从读写分离。 若前端流量突增导致从库负载过高,DBA会优先做个从库扩容上去…...
dreamweaver网站建设与管理心得/重庆网站关键词排名优化
每个拼多多店铺都是有自己的动态评分的,如果拼多多动态评分越高的话,说明这个店铺运营的越好,但如果评分很低的话,店铺会被限制很多。拼多多DSR到了多少不能参加活动? 一、拼多多dsr到了多少不能参加活动? …...
策划网站做营销推广/学校教育培训机构
缓存实现的过程以及淘汰旧页面的机制不同,所以会有不同缓存调度方法,就常见的就是FIFO,LRU,LFU缓存过期策略。 1.FIFO(First In First out):先见先出,淘汰最先近来的页面࿰…...
网站制作 需要什么网络技术/网站首页制作网站
引:http://www.javaeye.com/topic/283668 近期taowen同学连续发起了两起关于贫血模型和领域模型的讨论,引起了大家的广泛热烈的讨论,可是讨论(或者说是争论)的结果究竟如何,我想值得商榷。问题是大家对贫血模型和领域模型都有自己…...
wordpress forbidden/seo搜索优化公司
1 开发工具1.1 独立开发环境PL—>VivadoPS(ARM)-->SDK(Xilinx)或者第三方ARM开发工具1.2 集成开发环境SDSoC1.3 总结 独立开发环境大概分为四个步骤:(1)…...
技术支持 东莞网站建设电脑回收/天津百度seo排名优化
内容安全策略(CSP)是一个增加的安全层,可帮助检测和缓解某些类型的攻击,包括跨站点脚本(XSS)和数据注入攻击。这些攻击用于从数据窃取到站点破坏或恶意软件分发的所有内容(深入CSP) …...
wordpress个人模板下载/2021年最为成功的营销案例
我叫张志印,来自 Grab,这次主要跟大家分享一下我们在地理服务中的 Golang 实践。本次分享大纲:Whats Grab一个典型的派单流程一个核心地理服务系统演进历程Why go压测与调优QAGrab 是东南亚最大的出行平台,我们不只是…...