Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String

news/2025/2/26 5:10:57

Swift iOS macOS 如何 Localize StoryBoard,StoryBoard 本地化,添加多语言支持,基于 String

本地化主要包含两个部分:代码中文本的本地化StoryBoard 中文本的本地化
iOSmacOS 是一样的
这里只介绍 StoryBoard 的本地化,代码中文本的本地化 请参阅这篇文章的前半部分,懒得说了

Internationalizing Your iOS App: Getting Started

前言:StoryBoard 的本地化分为两种方式

一种是基于一个 StoryBoard 文件,摘取其中的字符串生成不同语言的 .string 文件,来实现多语言支持
一种是基于多个 StoryBoard 文件,每个语言都对应一个文件,这样做很麻烦,只要改一处就需要改多个文件

所以我们只说基于多个 .string 文件的本地化操作

一、项目概览

有这样一个项目,结构是这样的,目前没有实现多语言支持,也就是本文中所谓的 本地化 Localization,这些词都是一个意思。

在这里插入图片描述

二、给项目添加多语言支持

点击左侧项目,选择 [Project] 点选该项目,切到 [Info] 标签,点击下面的 [Localizations] 添加你需要支持的语言,如图:

在这里插入图片描述

此时点选左侧项目栏中的 main.storyboard 文件,会看到右侧会有多种语言支持,点选你需要支持的语言。
再点开 main.storyboard 右侧的箭头时会看到下面多出两个文件 Main.string(English) Main.string(Chinese_Simple),这里面就包含了该 storybaord 文件中所有的字符串。
如图:

其实你还可以看到 Localization.string 文件下面也有两个语言文件,这个是用于程序代码中使用的字符串,具体查看开篇提到的那个教程文章

在这里插入图片描述

三、翻译对应的文本

打开上面生成的文件,会看到如下的内容,进行翻译即可

在这里插入图片描述

四、编译调试不同语言下的呈现状态

我们完成了多语言支持,那么如何调试呢? xcode 有相应的功能,来设置调试时的系统语言来,来实现调试应用在不同语言状态下的状态。

[点击项目名] 选择 [Edit Schema]

在这里插入图片描述

在这里插入图片描述

然后 [Run] - [Info] - [Language] 选择语言即可,这样再运行,就会显示对应语言的状态了

在这里插入图片描述
在这里插入图片描述

五、效果

以下是我这个应用在实现多语言支持后的效果: 中文英文
在这里插入图片描述
在这里插入图片描述

六、重要:修改 StoryBoard 之后如何添加新词

前面做的已经很好,但如果你修改了 StoryBoard ,添加或删除了部分字符串后,如何修改呢?
对应的 .string 中的字符串并不会跟着变,新加的字符串也不会自己出现在 .string 文件中。

此时我们就需要手动进行一下一系列操作,来把新的字符串添加到对应的语言中,让我们开始:

1. 导出最新版的字符串

点击 项目名,选择 [Editor] 菜单中的 [Export for Localization] 即可将当前 StroyBoardInfo.plist 对应的字符串都导出,然后选择保存位置
在这里插入图片描述
在这里插入图片描述

2. 修改对应的翻译文件

打开导出的文件夹看到如下结构,主要是修改其中的 xxx.xcloc/Localized Contents/xxx.xliff 文件,里面包含所有需要翻译的字符串

在这里插入图片描述

打开看一下

在这里插入图片描述

里面 <source> 标签中的文本是原文本, <target> 中的文本是翻译后的文本

在这里插入图片描述
对于新添加的一些东西,是没有<target> 这个标签的,需要手动添加内容

在这里插入图片描述

为了方便查找哪些没有翻译,Command + F 搜索正则 </source>\n *<note>,就可以很容易定位到没有翻译的地方了,添加相应内容即可

在这里插入图片描述

3. 导入修改后的翻译文件

点击 项目名,选择 [Editor] 菜单中的 [Import Localization],选择你刚才修改的文件目录即可导入

在这里插入图片描述

导入后会看到 .string 里面已经添加了对应的翻译条目

在这里插入图片描述

如果有些内容没有翻译,它会提示你哪些没有被翻译,以如下的方式展示,再根据指示回去修改即可

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

七、结

截图累死我了,不留下个赞就走,不太合适吧 😄


http://www.niftyadmin.cn/n/4613417.html

相关文章

Integer类型的数据比较大小

因为实体类用的是Integer包装类&#xff0c;所以是对象&#xff0c;不能直接比较大小&#xff0c; 一、一个Integer一个Int可以直接比较大小 二、两个Integer需要用.intValue()方法比较大小&#xff1a; 例如&#xff1a;cw.getCwId().intValue()list.get(i).getCwId().intValu…

使用NLP从文章中自动提取关键字

运用场景&#xff1a; call centre 数据的关键字提取&#xff0c;从而根据关键字归类为部件相关类&#xff08;ADF,Engine, FB,boot up,duplex issue etc&#xff09;和流程相关类(install issue, print issue, fax issue etc.。 在研究和新闻文章中&#xff0c;关键词构成了…

Power BI中的QA功能预览

微软在休斯敦的全球合作伙伴大会上发布了Power BI for Office 365&#xff0c;通过Excel和Office 365中的自服务式商业智能解决方案为信息工作者提供了数据分析以及可视化功能以帮助他们更好的洞悉企业内部和外部的数据。其中有一个很棒的功能就是Power BI的QA功能&#xff0c;…

用户关闭页面前提示,提醒保存内容 Window 的 unload onunload onbeforeunload 事件

用户关闭页面前提示&#xff0c;提醒保存内容 Window 的 unload onunload onbeforeunload 事件 在线测试例子&#xff1a; http://kylebing.cn/test/unload-event/ 在很多有编辑内容的页面都需要实现这个功能&#xff1a; 用户在点击刷新、关闭、离开、关闭当前标签页、关闭浏览…

Linux深入篇之九:构建企业级Nginx+Keepalived集群架构

Linux深入篇之九&#xff1a;构建企业级NginxKeepalived集群架构随着Nginx在国内的发展潮流&#xff0c;越来越多的互联网公司都在使用Nginx。Nginx高性能、稳定性成为IT人士青睐的http和反向代理服务器&#xff0c;今天我们来实战构建NginxKeepalived高可用架构配置&#xff0…

Swift iOS macOS 实现 Hashable 协议

Swift iOS macOS 实现 Hashable 协议 对于一些项目中需要做比较的对象&#xff0c;就需要实现 Hashable 协议&#xff0c;因为要用到 比如我这里有个对象 Phrase&#xff0c;在项目中需要用到 两个 Phrase 对象作对比&#xff0c;就实现这个 Hashable protocle 这个协议中主…

xenserver

Citrix XenServer is the complete server virtualization platform from Citrix. citrix xenserver是来自citrix的完全服务器虚拟化平台。The XenServer package contains all you need to create and manage a deployment of virtual x86 computers running on Xen, the open…

直连路由、静态路由和动态路由的区别

根据路由器学习路由信息、生成并维护路由表的方法可将路由划分为三种&#xff0c;包括直连路由、静态路由和动态路由。下面将给出三者的各自定义&#xff0c;并对三种路由做相关对比&#xff0c;以便了解它们之间的区别&#xff1a;一 三种路由的划分1 直连路由 直连路由是由链…