Tag: 国际化

快速指南:iOS国际化(i18n)和本地化(l10n)

您是否在开发iOS应用程序,但不知道如何国际化和本地化iOS应用程序? 如果答案是肯定的,那么您来对地方了。 在本文中,我们将介绍如何使用Swift在iOS应用程序中设置国际化(i18n)和本地化(l10n)。 苹果的移动操作系统iOS在过去几年中经历了非凡的全球增长,以至于苹果表示,现在有150多个国家/地区可以使用iOS App Store,并且iOS设备支持40多种语言。 国际化(i18n)是使您的应用适应不同语言和文化的过程。 另一方面,iOS中的本地化(l10n)是将您的应用翻译成针对特定语言环境的多种不同语言的过程。 注意»通常,开发人员(尤其是iOS开发人员)可以互换使用这两个术语(国际化和本地化),但实际上,两者是不同但相互联系的概念。 因此,我们将这篇基于教程的文章分为两个小节: iOS中的国际化 iOS中的本地化 你知道吗? »国际化和本地化通常分别缩写为i18n和l10n。 i18n中的18表示国际化的“ i”和“ n”之间的字符数,而10n中的10表示本地化的“ l”和“ n”之间的字符数。 花哨的东西,不是吗? 在深入讨论上述小节之前,让我们首先了解一些必需的步骤。 初赛 在本节中,我们将熟悉在iOS应用程序中执行i18n和l10n所需的步骤。 工具 您将需要以下工具: Xcode(最新版本)。 现在,我正在使用Xcode 9。 编程语言(iOS) 我们将使用以下语言进行编程: 迅速 决定 在实际进行国际化和本地化之前,您需要首先确定要定位的区域(地区)以及这些区域使用的语言。 初步步骤对于定位您的受众群体至关重要。 在本文中,我将使用英语作为基本语言,使用法语,中文(繁体)和德语作为其他本地化语言。 您可以根据需要和目标受众在应用程序中添加任意数量的语言。 添加其他语言的步骤将完全相同。 要知道的术语»地区或国家被称为地区,尤其是当我们处理国际化和本地化时。 无论您在何处找到“区域设置”,都仅表示某个国家或地区。 书呆子术语,不是吗? 既然我们已经讨论了这些基础知识,那么现在该深入了解前面提到的小节了。 iOS中的国际化(i18n) 正如我之前提到的,i18n是使您的应用适应不同语言环境的过程。 从iOS开发人员的角度来看,这是使字符串在外部可编辑的过程-无论是在情节提要中还是在代码中。 此外,为了根据各自​​的区域设置日期,数字等,您必须使用不同的内置类。 例如,我们可以使用“格式”类根据区域设置日期格式,根据首选语言设置数字格式等等。 现在,我们将使用简单的设置来适应国际化过程。 建议»在完成应用程序的设计和编码部分后,请务必执行国际化和本地化步骤。 为什么? 因为Xcode会通过在可本地化的文件中自动添加字符串来节省您的大部分时间。 如果在编写应用程序代码之前执行这些步骤,则必须手动将所有字符串添加到其指定文件中(用于本地化)。 最重要的是,您应该在最后完成国际化的所有步骤。 您(iOS开发人员)需要执行以下步骤才能国际化您的应用程序: 为i18n设置项目 创建新项目或拥有要国际化的现有应用程序后,请确保在Xcode的项目信息设置(如下所示)中选中了名为“ […]

本地化您的应用程序以支持多种语言-iOS本地化

为什么我们需要支持多种语言? 因为并非所有iPhone和iPad用户都使用英语阅读或书写。 在此博客中,我将向您展示使用Xcode和iOS API本地化应用程序并使其以多种语言提供的功能是多么容易。 本地化是使您的应用程序支持多种语言的过程。 Xcode具有对本地化的内置支持。 有人认为本地化只是在进行翻译,这是正确的,但是本地化还包括其他元素,例如图像,声音等。此外,您还必须处理不同数值,日期和时间的显示格式。 在开始本地化工作之前,请确保您对应用程序进行国际化。 国际化是使您的应用适应不同语言,地区和文化的过程。 由于可以在世界的不同地方使用一种语言,因此您的应用应适应一个人居住的地区和文化习俗。 使用基础国际化-将面向用户的字符串与.storyboard和.storyboard文件分开。 使用添加新的语言支持,在“项目信息”选项卡的“本地化”部分下单击“ + ”按钮。 然后选择您要支持的语言。 在这里,我们增加了俄罗斯的支持。 现在,您可以在.storyboard看到新语言 现在,我们必须导出在应用程序中用于翻译的文本。 为此,我们在编辑器菜单中有一个选项。 情节提要中使用的文本将自动导出。 对于控制器内部使用的文本,我们必须使用NSLocalizedString方法更改字符串。 一旦我们使用NSLocalizedString更改了字符串,Xcode就会自动为控制器内部使用的文本创建一个名为Localizable.strings的文件。 在导出本地化的结果中,我们将得到一个。 用于翻译的xliff (XML本地化交换文件格式)文件。 我们可以使用很多在线服务进行翻译和编辑。 xliff文件。 此外,我们还有用于xliff文件编辑的Mac应用程序。 例如: -Xliff编辑器 一旦您获得翻译。 来自转换器的xliff文件,您可以使用“编辑器”菜单中的“导入本地化”选项轻松导入到项目中。 此外,我们应该准备好代码以进行本地化。 首先,我们需要使用NSLocalizedString宏将面向用户的文本与代码分开。 在此示例中,我获得了警报标题,消息和按钮的本地化字符串。 让localizedTitle = NSLocalizedString(“ Welcome”,评论:“”)let localizedContent = NSLocalizedString(“感谢您下载此应用程序”,评论:“”)let alert = UIAlertController(title:localizedTitle,消息:localizedContent,preferredStyle:.alert )alert.addAction(UIAlertAction(title:NSLocalizedString(“ Ok”,comment:“”),样式:.default,处理程序:nil))self.present(警报,动画:true,完成:nil) 在开发期间和本地化之后,使用多种技术对您的应用程序进行本地化测试。 在Interface Builder中,使用伪语言预览用户界面。 使用不同的伪语言运行应用程序。 预览本地化 导入本地化之后,您可以使用界面生成器预览本地化 运行应用 您如何测试本地化字符串是否正确显示? […]

iOS i18n:XCode中的情节提要国际化

请注意,默认情况下已选中“ 使用基本本地化”复选框。 如果我们取消选中它,则XCode会询问我们要将可本地化文件移动到的特定语言环境。 在上面显示的对话框中单击“ 移动 ”会将故事板从Base.lproj移到en.lproj 。 这意味着我们的翻译人员必须跳入XCode并直接翻译情节提要,而不是简单地使用字符串文件。 我怀疑这是我们大多数时候想要的,因此我将在此处启用“基本国际化”。 注意» 如果禁用“基本国际化”然后重新启用,则可能必须遍历所有可翻译的故事板,并更改非基本语言的本地化文件类型。 XCode会将那些切换到情节提要文件。 如果需要,可以在检查器中将其还原回字符串文件。 由于我们使用的是基本国际化,因此无需做很多事情来确保我们的字符串(例如标签文本)是国际化/可翻译的。 我们只是从XCode免费获得它。 添加支持的语言环境 我们可以在项目设置中为我们的应用添加支持的语言环境。 我们只需导航到项目设置的“ 信息”选项卡,确保选择了整个项目(而不是特定的目标),然后单击 按钮在“ 本地化”下添加新的语言环境。 选择语言环境时,系统会询问我们是否要对新语言环境使用情节提要或字符串文件。 这将取决于您的项目需求,但是在大多数情况下,我们需要字符串文件,并且默认情况下会选择它们。 自动版面配置和i18n XCode的UI布局系统Auto Layout使用约束使UI视图适应不同的屏幕尺寸,方向等。AutoLayout实际上为我们完成了很多i18n工作。 让我们看看如何。 前,后,左和右约束 默认情况下,针对视图的前缘和后缘设置XCode中的水平约束。 视图的前沿是从左到右的语言布局中的左边缘,而从右到左的语言布局中的右边缘。 仅通过使用后缘和前沿,我们就获得了从右到左语言(如阿拉伯语和希伯来语)的大量支持。 我们可以在XCode的检查器视图中手动关闭此功能。 例如,当我们希望视图与语言方向无关时,这将很有用。 我们只需选择一个约束,打开“ 大小”检查器 ,然后单击“ 第一项”或“ 第二项”的下拉菜单。 然后,我们单击“ 尊重语言方向”选项以将其禁用为活动约束。 当我们这样做时,我们可以看到约束与视图的绝对左边缘有关,而与语言方向无关。 避免固定宽度约束 请注意,该文本在我们的某些应用标签中被截断。 对于i18n来说,这尤其是一个问题。 对于我们的开发语言,标签宽度通常可以很好地工作,但是没有考虑到相同标签的不同语言将具有不同的文本大小。 这可能会导致文本被截断并且信息丢失,从而可能使我们的用户感到困惑或烦恼。 当我们为标签设置固定宽度时,通常会发生文本截断。 我们可以通过删除固定宽度约束并使用尾随和前导约束来固定标签来解决此问题。 让我们浏览一下Open Plant Wiki中的视图并执行此操作。 这解决了我们的截断问题,并可以容纳更多的翻译。 试试看,然后重新运行该应用程序以查看效果。 注意自动版面设计警告 如果我们花时间研究XCode在构建接口时为我们生成的“自动布局”警告,则可以避免上述固定宽度问题。 […]

国际化和本地化

本地化是将您的应用翻译成多种语言的过程。 但是在本地化您的应用程序之前,先对其进行国际化。 国际化是使您的应用程序能够适应不同语言,地区和文化的过程。 由于一种语言可以在世界的许多地方使用,因此您的应用应适应一个人居住的地区和文化习俗。 在国际化的应用程序看来,它似乎是它支持的所有语言和地区的本地应用程序。 App Store遍布150多个国家/地区,而将您的应用程序国际化是进入这一全球市场的第一步。 在App Store Connect中,指定您的应用在所有地区还是特定地区都可用。 然后,您可以为要支持的每个目标市场定制应用程序。 其他国家/地区的用户希望以他们理解的语言来使用您的应用,并以熟悉的区域格式查看日期,时间和数字。 这只是有关内部化和本地化的概述。 有关更多信息,我建议阅读Apple的所有文档。 阅读文档很无聊,但是它可以帮助您扩展编程知识的头脑。 如果您想跳入代码,则可以观看以下视频: 该视频包含以下本地化功能: 在情节提要中本地化UI控件。 通过使用代码本地化字符串。 本地化日期时间。 本地化数字。 本地化名词复数。 首先,您需要在此处下载该入门项目,以按照视频中的指南进行操作。 如果遇到任何问题,都可以在此处下载完整的项目。 祝好运!

像Pro一样在Swift中进行本地化

配置BartyCrouch 上述所有功能默认情况下都是打开的,因此您无需配置BartyCrouch即可使用它们(只是不要忘记构建脚本中的-x选项以确保在Xcode中显示警告)。 您可以使用配置文件完全自定义BartyCrouch-我建议您至少使用一个配置文件来优化BartyCrouch的性能。 如果您的开发语言不是英语,那么您肯定需要一种语言,因为这是默认语言。 README有一个很好的分步配置部分,因此在此不再赘述。 去看看吧。 迅捷 还记得Android Studio通过提供编译时间检查和自动补全功能如何比Xcode更好地处理资源访问吗? 好吧,SwiftGen修复了该问题。 它会自动在您的项目中搜索任何指定类型的资源,并生成一个包含所有资源名称的enum的Swift文件。 这样,您在访问它们时都会获得编译时检查和自动完成。 出于本文的目的,我们将只为本地化字符串生成一个枚举,请参阅自述文件以使用更多选项,例如静态引用图像,颜色和情节提要。 要配置SwiftGen,我们首先需要在项目中创建一个空的Strings.swift文件。 该文件的内容将被SwiftGen自动替换,因此最好将其与其他代码分开放置,例如在Resources/Generated 。 接下来,在项目的根目录中创建一个名为swiftgen.yml的文件, swiftgen.yml其中添加以下内容: 用适当文件的正确路径替换path/to/your两个条目,然后将此构建脚本添加到您的项目中: 接下来,确保SwiftGen构建脚本在BartyCrouch之后立即运行。 第一次构建项目后,从现在开始,您将能够用对生成的枚举L10n调用替换对NSLocalizedString的调用(这是Localization缩写,但在L到end n之间没有10个字符)。 请注意,SwiftGen将自动通过分割您的本地化密钥. 并使用-或_进行驼峰铸造。 因此,使用诸如ONBOARDING.PAGE_ONE.TITLE或ONBOARDING.PAGE_ONE.TITLE onboarding.page-one.title类的键都可以通过调用L10n.Onboarding.PageOne.title来使用。 结合BartyCrouch和SwiftGen 现在,您已经向Xcode添加了两个缺失的功能,但是它们不能很好地协同工作。 当使用BartyCrouch.translate调用创建新的本地化时,BartyCrouch会在下一个版本中将其转换为NSLocalizedString调用,并且仍然需要用L10n调用替换它。 但是BartyCrouch在这里也涵盖了我们: 只需将[update.transform]部分中.bartycrouch.toml文件中的配置选项transformer从foundation更改为swiftgenStructured 。 这将确保BartyCrouch代替了Foundation NSLocalizedString,将把BartyCrouch.translate转换为直接调用SwiftGen的L10n 。 专业版本地化工作流程 作为上述所有步骤的结果,面向开发人员的新本地化工作流程如下所示: 致电BartyCrouch.translate ,并提供您的本地化密钥和一项或多项翻译。 生成您的项目(在执行此步骤之前,您可以执行多个步骤1)。 由于无论如何都会在某些时候执行步骤2,因此现在实际上只是一个步骤。 结论 通过为您的项目配置BartyCrouch和SwiftGen,您可以简化Xcode中的本地化工作流,这既减少了开发人员的注意力,又在防止翻译问题方面更加安全。 这样可以节省时间和神经。 本文 由 CihatGündüz 撰写 , Jamit Labs iOS开发负责人兼 BartyCrouch的 主要作者