iOS国际化和本地化教程

2020-07-24 23:42:06 Lingua Greca

本文共6062个字,阅读需16分钟

阅读模式 切换至双语

iOS,苹果移动操作系统,在过去几年里发展速度之快,令人惊叹。 事实上,据苹果称,目前苹果应用商店在150多个国家上线,其iOS设备支持40多种语言。 显然,这就要求iOS应用从一开始就需要用多种语言来命名世界不同地区的用户。 如何实现这一点,就是本篇iOS国际化与本地化教程要回答的问题。 iOS开发人员通常倾向于互换使用这两个术语。 在现实中,二者在相互联系的同时,它们又有很大的不同。 因此,我们将本iOS教程分为两部分: iOS国际化与 iOS本地化。 在深入研究上述子标题前,让我们先看一看实质性的先决条件。 为iOS国际化做好准备 iOS国际化 设立本地化项目 添加本地化语言 语言支持后的项目变化 iOS中的本地化(l10n) 集成开发工具Xcode 为译者导出可本地化文件 本地化推荐方法:一种更有效的本地化解决方案 更高效的本地化解决方案 为iOS国际化做好准备 首先,要实现iOS应用程序的国际化和本地化支持,所有初学者将使用iOS的编程语言Swift(5.0版本)。 我们还将使用Xcode集成开发环境,它包含了生成iOS应用程序(11版)所需的所有工具。 现在,如果您准备好了,首先确定您想选择的地区,以及对应的语言。 国际化中,这些区域也称为locales。 在本iOS教程中,将使用英语作为基本语言,法语,中文(简体)以及德语作为本地化的目标语言。 你可以在iOS应用程序中添加任意多种语言,这取决于你的需求和目标受众。 添加其他语言的步骤将完全相同。 了解了基础知识后,现在该讨探讨上述问题了。 iOS国际化 国际化(i18n)过程就是让您的iOS应用程序适应不同地区的过程。 从iOS开发人员的角度来看,则是实现字符串外部可编辑的过程——无论是在脚本还是在代码中。 此外,为了根据各自的地区设置日期,数字格式等,您必须使用不同的内置类。 例如,我们可以使用“Formatting”类根据区域设置日期的格式,根据首选语言设置数字的格式,等等。 现在,我们将通过简单设置来适应国际化过程。 建议:在完成应用程序的设计和编码部分之后,始终执行国际化和本地化步骤。 原因何在? 因为Xcode将通过在可本地化文件中自动添加字符串来节省大部分时间。 如果在为应用程序编写代码之前执行这些步骤,则必须手动将所有字符串添加到指定的文件中(用于本地化)。 归根结底,你应该在最后完成国际化的所有步骤。 如果您在项目中使用界面生成器和故事板,则此方法是正确的。 但是,如果您是以编程方式布局UI组件,那么最好在项目开始时就开始这个过程,以节省大量时间,并避免为本地化而省略任何字符串。 注意:在国际化和本地化您的iOS应用程序时,您很可能会出现以下场景: 情况一应用程序UI组件完全在界面构建器中建成时,使用故事板或XIB。 情况二:应用程序UI组件同时使用故事板和以编程方式在代码中构建。 最后一种情况是应用程序UI组件是以编程方式在代码中构建的。 你可以应用程序中使用这些变体中的任何一种。 然而,在演示应用程序中,我们在故事板中设置了我们的UI组件,并以编程方式在代码中设置。 作为一名iOS开发者,你需要采取以下步骤,实现APP国际化: 设置本地化项目 首先,您需要在GitHubor上下载初学者项目,拷贝存储库。 这款简易应用程序,显示我们的太阳系,并在此基础上建立。 它将帮助我们应用国际化和本地化iOS应用程序的实质性步骤。 如果我们在构建UI组件时使用故事板,编程UI或两者的组合,则可以应用此程序。 该应用程序的本地化范围不仅有文本,还有应用程序中的图像资产。 因此,首先,在Xcode上运行代码,您的应用程序如下所示: 现在已经准备好将应用程序国际化,请遵循以下步骤: 正如上图所示,三个框:红色框,黑色框,和蓝色框。 首先,从导航器面板中,选择项目根文件(。xcodeproj)(上图所示红色框)。 选择项目类型。 如图所示,有两个选项可用。 Targets是默认选项。 您需要将其更改为Project(即上图所示黑色框)。 如果“Use Base Internationalization”选项尚未选中,请确保选中该选项(如上面的蓝色框所示)。 默认情况下通常是选中的。 Xcode中的“Use Base Internationalization”是指什么? 在创建一个新项目时,Xcode会自动生成与本地化相关的文件。 当您选中“Use Base Internationalization”选项时,Xcode将main.storyboard和launchscreen.storyboard转移到默认语言的“Base.lproj”文件夹中。 我们在本教程中的基本语言是英语,如决策部分所述。 完成这个基本步骤后,需添加应用程序支持的不同语言。 在本教程中,我们将使用三种语言--法语,汉语(简体)和德语--进行本地化,表示不同的地区,如决策部分所述。 让我们添加这三种语言支持! 添加本地化语言 为了在您的应用程序中添加语言进行本地化(l10n),您需要再次转到项目信息设置,并单击“+”按钮(如下所示): Xcode将向您显示可供选择的语言列表。 让我们先选法语! 一旦选择一种语言(以法语为例),Xcode会要求您选择文件和参考语言来创建您想要的语言本地化(以法语为例),取消选中LaunchScreen.Storyboard。 苹果只允许在LaunchScreen中使用静态资产,不支持在LaunchScreen中进行本地化。 在上图中,需要注意两点: 参照语言——设计应用程序时使用的基本语言,默认为英语(保持原样!)。 文件类型——确保所有文件都设置为可本地化字符串。 单击Finish,如上面的屏幕截图所示 语言支持后项目变化 添加对法语本地化的支持后,您将在项目文件中看到以下三个更改: Xcode将在您的项目中创建一个名为“fr.lproj”的文件夹,因为我们已经添加了对法语语言的支持。 在该文件夹中,Xcode将创建一个与我们在上一步中选择的main.storyboard相关联的字符串文件。 然而,第三个变化取决于何时向应用程序添加本地化支持。 如果您遵循我在开头提到的关于何时国际化和本地化应用程序的建议,您将看到在main.storyboard中显示的标签将被赋予对象ID并添加到main.strings文件中。单击main.storyboard(现在是一个文件夹),您将看到添加的新字符串文件(main.strings),如下所示。 我们在Main.Storyboard中只有一个标签“Ready,Let's Go!!!”。 这意味着我们将在main.strings(法语)文件中有一个“ready,let's Go!!!”对象及其objectid。 查看下面的屏幕截图,了解main.strings(法语)文件的内容。 按照上述步骤添加中文(简体)和德语。 当只使用故事板时,到目前为止,上述步骤运行良好。 当我们以编程方式在代码中布局UI组件时,情况如何? 在这种情况下,我们如何启用国际化? 好吧,我们已经介绍过了,您需要在Xcode中创建一个字符串文件,并将其命名为可本地化。 查看下面的截图: 选择Strings文件并将其命名为Localizable,然后创建该文件。 Localizable.strings文件将保存我们稍后想要本地化的字符串。 选择您创建的Localizable.strings文件,然后导航到文件检查器。 单击Localize下的Localize。 这将显示选择本地化语言的提示。 首先,我们将选择我们的基本语言英语,并从文件检查器中分别检查其余的中文,法语和德语,如下所示。 一旦完成上述步骤,将有四个可本地化的字符串文件,其中一个是我们的基本语言英语。 至此,本地化应用程序的设置已几近完成,但还丢了一点,我们的资产,我们希望把应用程序中使用的图像本地化,即九大行星。 由于应用程序显示了所拥有的太阳系九个行星的图像,我们希望我们支持的每一个地区都有图像和文字捕捉他们自己的语言。 首先,单击导航面板中的资产文件夹(绿色框),并选择一个行星图像,让我们从地球图像开始。 在Attributes检查器中,单击Localize: 检查所有三种语言,法语,汉语,德语。 一旦您完成了这一操作,它将创建新的区域,您将在其中添加您在本地化时支持的语言的相应图像。 你可以对剩下的行星图像做同样的处理。 我们现在将研究应用程序的本地化部分。 iOS中的本地化(l10n) 在iOS中,本地化基本上就是翻译过程。 有两种方法可以用来翻译应用程序。 直接在Xcode中进行操作(由开发人员) 为译者导出可本地化文件(XLIFF格式) 下面让我们分别讨论这两种方法! 在Xcode内进行操作 首先,从简单的内容开始。 定位图像。 待使用图像已经与项目捆绑在一起,已经为我们想要支持的相应语言准备了图像。 要获取这些资产,请从演示项目的导航面板中单击demoappassets.zip,然后右键单击并选择Show on Finder,从那里,您可以轻松地将压缩文件复制到您的桌面,然后解压缩以访问所有图像。 在导航面板中,单击Assets文件夹。 您将看到为支持的不同语言放入图像的部分。 上面的蓝色方框部分将拍摄带有德文文本的图像,上面的红色和黑色方框也同样适用。 从您下载的图片中,将“地球图像”从德语文件夹中拖到蓝色框中,从法语文件夹中,将“地球图像”拖到红色框中,从中文文件夹中,将“地球图像”拖到黑色框中。 对剩下的行星图像做同样的处理。 一旦完成这些操作,资产就完全本地化了。 现在,将代码中使用的文本内容本地化。 在这个演示应用程序中同时使用了故事板和编程UI,在代码中以编程方式添加的文本内容开始,对其进行本地化。 打开当前为空的Localizable.strings文件。 此文件接受键值对字符串,这些字符串必须以分号(;)结束。 我们有两个文本需要本地化:HeaderView中的“the Solar Planets”和WelcomeController中的“Explore”。 在localizable.strings(英文)文件中放入以下键值对: 要在我们的代码中实际使用这一点,我们需要使用苹果公司为本地化提供的API。 我们将使用macroNSLocalizedString(key,comment),它返回字符串的本地化版本。 关键字是在localizable.strings中使用的关键字,如果您想要添加额外的语境以帮助您的翻译人员,注释将非常有用。 需要注意的一点是,您应该确保您的字符串键是唯一的,如果由于任何原因在调用NSLocalizedString(key,comment)时错误地使用了错误的键,您提供的错误键将作为本地化字符串返回给您。 你要注意这一点。 我们已经在代码中创建了一个字符串扩展,这将帮助我们简化工作。 在我们继续之前,我想提请大家注意苹果公司提供的另一个方便的API,我们也可以在本地化应用程序时使用它。 它是 当您想要将字符串文件拆分成更小的可管理大小时,特别是当您在一个非常大的应用程序上工作,并且不想将所有可本地化的字符串都放在一个localizable.strings文件中时,这个API就会变得非常有用。 默认情况下,NSLocalizedString(key,comment)只读取Localizable.strings文件。 对于上述API的参数,表名捕获您创建的字符串文件的名称,bundle是包含字符串文件的bundle,value是您希望在提供错误键的情况下显示的字符串,注释用于为翻译器提供附加上下文。 现在继续操作,打开String+Extension.swift文件,看看文件中有什么。 要分别在HeaderView文件和WelcomeController中本地化字符串,请将“the Solar Planets”和“Explore”替换为: 到此,已经完成了所有的艰苦工作。 另一部分是添加我们支持的其他语言的翻译文本。 如何实现这一点? 使用谷歌翻译? 不,我不建议这么做。 这是因为它可能不会为您提供正确的文本翻译,最终可能对您的用户有害无益,他们可能发现翻译十分糟糕。 实际上已覆盖短语,并将为您提供优良的服务,由您所支持的语言的对应专业译员来翻译文本。 现在还处于应用程序演示阶段,不在意翻译结果,所以尝试使用谷歌翻译来翻译文本内容,这不是在生产应用程序,所以无需担心。 我们将把上面的文字翻译成中文,把剩下的一个翻译成其他语言。 打开localizable.strings(中文,简体)并放入这些字符串。 差不多完成了,但是等一下,仍然没有在故事板中为生成的文本内容本地化。 Xcode已经完成了工作,我们所需要做的就是用我们的翻译版本替换文本内容。 不得不对Main.Storyboard中的文本进行本地化。 在LaunchScreen.Storyboard中,有一个静态图像,苹果建议我们在LaunchScreen.Storyboard中使用静态图像,并且避免使用可能需要在这里本地化的字符串。 因此,不会本地化launchscreen.strings文件。 打开Main.Strings(中文,简体),将“Ready,Let's Go!!!”替换为“,!” 走到这一步,鼓励一下自己,我们做到了。 我们已经完全本地化了我们的内容,包括文本和图像资产。 现在是关键时刻,测试一下是否真的有效。 我们将通过在Xcode中更改应用程序的语言来在模拟器中测试这一点。 请查看下面如何实现这一目标。 从上面点击编辑场景: 选择运行并点击选项,然后将蓝色框中的应用程序语言更改为中文,简体。 完成后,单击Close并运行项目。 可以!我们做到了!

以上中文文本为机器翻译,存在不同程度偏差和错误,请理解并参考英文原文阅读。

阅读原文