如何本地化一款iPhone App

xcode连接新的iPhone进行app调试教程 加急培训了一个月,就开始了在ios行业的摸爬滚打。今天准备给一个服务器端人的手机安装一下app,好让他调试接口性能,才发现手机连上之后不能直接运行。弹出了类似这个的东东:      半路出家,这两个月都是给我功能写写代码,手机连上都是可以直接在上面跑的,实在无从下手,只好请教公司正宗的ios开发人员。步骤大概如下: 第一步:打开xcode---->window---->Organizer 阅读详情

Ray Wenderlich (原作者)


本篇教程是由Sean Berry发布的,他是一位电脑达人,在Algebra Touch做开发工作。

Me Gusta Localization!

Me Gusta Localization!

虽说目前以英语为主的App的市场是最大的,但是世界上还是有很多非英语的用户,可以通过提供本地语言的支持来极大地提升他们的用户体验。

好消息是Apple已经为我们提供了一套简单易用的,Xcode集成的API方法,来为App增加多语言支持。这个过程称为本地化,这就是本期教程我想要教给大家的!

在本篇教学中,你将要本地化一款我准备好的示例app,我受到Ray的这篇in-app purchases中的暴走漫画的启发制作的这个app。这个app非常简单 – 当你点击‘You Like?’时,一个笑脸出现并缩放,最终渐隐消失。

但是目前它只支持英语,所以 vamos a traducir!(西班牙语,意思为“我们要翻译了!”)

本教程使用Xcode 4,所以如果你还没升级它,为什么不借此机会升级呢?

准备开始

第一步请先下载iLikeIt初始工程,我们将要在之后的教程中将它本地化。

编译并运行,你将会看到如下所示:

Non-localized iPhone App

我们有3个需要本地化的项目,它们是:

  • 标题文字: ‘Hello!’
  • UI元素:’You like?’按钮
  • 最后是那个图片(它上边有文字!)

将文字从代码中剥离

和大多数项目一样,本项目也将字符串写死在代码中。我们需要将这些写死的字符串从代码中剥离出来,这样才能本地化它们。

在Xcode中实现此功能是通过新建一个后缀为“.strings”的文件,让其包含项目需要的字符串。然后把之前写死的字符串,使用适当的函数调用,替换为“.strings”文件中相应的字符串。

我们这就试试看。在Xcode中选择iLikeIt group,然后选择FileNewNew File。选择iOSResourceStrings File,点击Next,如下图所示。将其命名为Localizable.strings,点击Save。

Adding a .strings file to your Xcode project

注意Localizable.strings是iOS寻找本地字符串默认的文件名。如果你不使用此名字,那么你在还需要额外指定.strings文件的名字。/p>

strings文件的格式是:

"KEY" = "CONTENT";

对于我们的“Hello!”字符串,则需要添加:

"TITLE" = "Hello!";

现在切换到iLikeItViewController.m,找到viewDidLoad方法。目前此处设置字符串的方式为:

self.titleLabel.text = @"Hello!";

我们想要从.strings文件读出我们的字符串。为了完成它,改变上行内容使用NSLocalizedString调用,如下所示:

self.titleLabel.text = NSLocalizedString(@"TITLE", nil);

如果你对NSLocalizedString有好奇的话,control单击NSLocalizedString并选择Jump to Definition。你会发现它是如下定义的:

#define NSLocalizedString(key, comment) 
    [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]

本质上地,它是调用了localizedStringForKey方法根据给定的key查找当前语言对应的字符串。它的table参数为nil,所以它会使用默认的strings文件名(Localizable.strings)。想获得更多的内容,请参考Apple的NSBundle Class Reference。

还有一个值得注意的事。这个宏使用了一个叫做comment的参数,但是看起来它并没有做任何事儿!这是因为除了在Localizable.strings手动输入key/pair的方法外,还有一种通过使用iPhone SDK提供的工具自动生成字符串的方法,对于大项目来说,这种方法非常方便。

如果你使用了此方法,你可以为每一个字符串添加一个comment作为翻译者的辅助参考说明。例如,你可以注明这个字符串是在什么上下文位置使用的。

背景知识已经介绍足够多了,我们这就试试看!编译并运行项目,它会像往常一样在主屏幕显示“Hello!”。但是西班牙语版的在哪儿呢?我们已经把准备工作做的很充足了,这一步会很容易。

添加西班牙语本地化支持

首先选择Localizable.strings,然后打开Info面板。完成这一步你需要点击Xcode界面顶部的工具栏的第三项打开属性界面,然后选择顶部的第一个tab页,如下所示:

The location of the info pane in Xcode 4

添加另一种语言支持的步骤为,首先点击右侧的‘Localization’面板中的‘+’按钮。第一次会创一个英语的localization。注意再你执行完此步骤后有可能失去对Localizable.strings的选择,再次选择它,再次点击‘+’按钮,从下拉列表中选择‘Spanish(es)’

到此为止,Xcode已经为每种语言创建了各自版本的Localizable.strings。如果你想看看它是怎么在幕后工作的,在Finder中打开此项目,你会看到如下内容:

Localized subfolders in project folder

看到‘en.lproj’和‘es.lproj’了吗?它们包含了每种语言特定的版本的文件。

‘en’是English的本地化编码,‘es’是Spanish的本地化编码。如果你对此感到好奇,这是语言编码详细列表。

当iOS想要得到英语版本的文件时,它会从en.lproj中寻找,如果它想得到西班牙语版本的文件就会从es.lproj中去找。

就是这么简单!把你的资源放到合适的文件夹中,iOS会替你完成余下的工作。

回到Xcode并点击Localizable.strings的下箭头,让它显示出子项目。你会看到我们正在使用两个版本的文件:

Multiple versions of file - one for each localization

点击‘Localizable.strings (Spanish)’并把文本替换成以下内容:

"TITLE" = "Hola!";

你的app现在更加世界化了!我们这就试试看这个功能是否工作正常…

进入Settings(设置)程序,选择General(通用)-> International(多语言环境) -> Language(语言) -> Espanol,就可以让模拟器显示出西班牙文了。

删除app并选择ProjectClean来执行一次全新的编译和安装。当你编译并运行后你会看到Hola!的字样:

Localized UILabel

调整UI元素

接下来要本地化的是按钮上的文字。西班牙语对应的内容应该为‘~Es bueno?~’

这个出现了一个问题,我们想让按钮的宽度与按钮上的文字保持一致。对于标题label来说,这并不是问题,因为它没有宽度边界限制。但是对于按钮我们需要调整它的尺寸以让它看起来更好。

如果我们只是修改viewDidLoad中的文字,它会看起来很烂,如下图所示:

Localized text doesn't fit issue

完全不可接受!所以我们要添加一个本地化的xib,来让按钮在西班牙语模式下更宽。

选择iLikeItViewController.xib并在右侧的info面板中,点击‘+’按钮添加一个本地化并选择Spanish。注意你可能需要向下滑动Info面板以让其显示,因为它会共享其他的一些Interface Builder的内容。

现在我们在Spanish文件夹(es.lproj)中有了iLikeItViewController.xib的一份copy。选择iLikeItViewController.xib (Spanish),把按钮上的文字改为‘~Es bueno?~’(默认地它会自动调整按钮的大小)。

小技巧:想要在Mac上输入例如朝下的问号这种特殊字符,方法是前往System Preferences(系统偏好设置)Keyboard(键盘),并选择Show Keyboard(显示键盘)& Character Viewer in menu bar(显示字符显示程序)。你会看到一个新的选项出现在你的菜单栏中,如下所示:

Showing Character Viewer in toolbar

你可以使用它来浏览特殊字符,双击来选择它到你的app中,包括Xcode。

当你设置完成你的label后,删除app并再次通过ProjectClean重新编译安装(你也许需要重启Xcode才能让这些新设置生效)。然后编译并运行你会看到如下所示:

UIButton localized with Interface Builder

图片

我们在图片中也有文字所以我们要本地化它。在一个西班牙语的app中有些英语会先得很外行。

选择‘ilike.jpg’并添加一个Spanish的localization(你应该已经很熟悉这个步骤了!)

检查一下项目文件夹,‘ilike.jpg’已经在English文件夹(en.lproj)中了并且Spanish文件夹(es.lproj)中也有一份拷贝。为了让西班牙版本的图片有所不同,我们只需要简单地把西班牙文件夹中的图片替换掉。

请下载以下图片:

Me Gusta!

我也在起始工程中保存了一份,名字为megusta.jpg。

将其重命名为ilike.jpg并把它移动到Spanish文件夹(es.lproj)中,覆盖掉原来的文件。

Clean并重新编译就大功告成了!

Localized iPhone App

恭喜!你已经学会了本地化的大部分内容了。

免费额外奖励

如果你想翻译app的名字该怎么办呢?你的Info.plist指定了一个特殊文件,在这里你可以为app指定不同语言的名字。所以我们给他起一个不同的西班牙语名字,对Supporting Files中的InfoPlist.strings文件添加本地化并选择Spanish版本:

"CFBundleDisplayName" = "Me Gusta";

这样就可以改变在Springboard中app的名字了。

…当本地化时这里遇到了一个问题。英文版本的名字有个‘i’前缀(和苹果的命名习惯保持一致的)。

但当翻译为西班牙版本时,这个笑点就不复存在了。其实,这是一个很糟的笑话,西班牙版本的名字必然它更好! 


iOS小技能:使用 Xcode 调试第三方应用(重签名) 文章目录前言I 、流程步骤II、提高APP的被逆向难度,以过滤一大部分的中低级攻击者2.1 [iOS敏感逻辑的保护方案:【把函数名隐藏在结构体里,以函数指针成员的形式存储】](https://blog.youkuaiyun.com/z929118967/article/details/83746545)2.2 越狱检测2.3 反调试2.3.1 ptrace这个函数很容易修改,几种破解方式 前言 ldid工具:ldid是mac上的命令行工具,可以用于导出的签名文件、对文件进行重签名等操作 I 、流程步骤 对于越狱设 阅读详情

相关推荐

三极管稳压电路仿真分析

Z1的负极连接到三极管的基极,三极管发射极E是输出,形成了一个射极跟随器,也就是说,E极的电压随着B电压变化而变化,但BE之间有一个压降,一般硅管0.7V左右,假设B极是6.7V,那E极就是6.7-0.7=6V,所以就有一个公式VOUT=Vz-Vbe,可以根据VOUT来选择合适的稳压管。从稳压管的SPEC中我们可以看到,Vz@Izt这个参数,指在Izt=20mA时,稳压管的稳压值Vz=5.1V,也就是说流过稳压管的电流在20mA以上,稳压效果最佳。三极管导通之后,E点电压会升高,当升高到Vbe。

U_YAO的博客 2325

软件测试 | Xcode基础使用

在模拟器上运行开发的程序是不需要开发者证书的,但是如果要在真机上部署,就需要开发者证书。苹 果的开发者证书是收费的,需要去苹果的开发者网站上去申请和购买。从 build 的 log 里可以看到编译成功的 app 文件,这个文件可以用于自动化测试。打开演练 App 项目,直接在 Xcode 中选择对应的模拟器,点击运行即可。真机运行需要做额外的设置,并需要 iOS 真机或者 iPad。选择你的已经连接的个人设备,然后点击“运行”即可。查看APP的BUNDLEID。提取编译成功的APP文件。

慕漓的博客 1131

从电商平台到微信私域:构建合规跳转链路的技术实现

在互联网营销与用户增长领域,链接跳转是连接不同平台、引导用户流量的基础技术。其核心原理是通过服务器端路由与参数解析,实现用户请求的接收、处理与重定向。这项技术的价值在于能够突破平台间的生态壁垒,实现流量的合规、可控迁移,尤其适用于跨平台营销、私域沉淀等场景。在实际应用中,常需处理微信环境限制、参数传递与动态内容生成等挑战。本文聚焦于电商平台(如淘宝)到微信生态的跳转需求,详细阐述了如何利用Node.js、Express框架及二维码生成技术,构建一个包含环境检测、参数传递与动态落地页的完整跳转系统,以解决微信

weixin_33889665的博客 324

iOS 一个APP打开另一个APP

iOS 一个APP打开另一个APP

iOS笔记 6738

《UDS协议从入门到精通》系列——图解0x23:通过地址读取内存

如何读取ECU中指定内存地址的数据?图解UDS 0x23服务带你快速上手!!

车载系统攻城狮 2623

Altium Designer应用技巧1: 功能模块的复用方法

Altium Designer应用技巧1: 功能模块的复用方法      我们在使用Altium Designer进行电路图设计时,常会遇到功能模块的复用问题,例如我们经常需要将12V以DC-DC的方式转换成5V,这在很多线路板上都会应用到。现在我们普通的做法是,每个板子都重新绘制一遍,像这样DC-DC的电路,很浪费时间。那么如何采用提高工作效率呢?我们可以采取Altium Desi

snmplink的博客 1万+

关于Xcode App Store上传步骤

1.点击Xcode,然后 打开Open Developer Tool 下的Application Loader  

b0303的博客 4703

目标检测: yolo26在RK3588上部署

YOLO26发布:端到端目标检测新突破 摘要:Ultralytics最新发布的YOLO26算法采用原生端到端设计,无需NMS后处理,显著提升推理效率。该模型基于三大核心原则: 简洁性:消除NMS步骤,实现直接预测 部署效率:简化集成流程,降低延迟 训练创新:引入MuSGD混合优化器,加速收敛 部署教程显示,YOLO26可适配RK3588等边缘设备,通过ONNX转换和RKNN工具链实现高效部署。其创新架构特别优化了分割、姿态估计等专业任务,标志着目标检测技术的重要革新。 (字数:149)

qianxun 1448

ScreenshotFramer CLI工具详解:命令行自动化截图处理完整教程

ScreenshotFramer CLI是一款功能强大的命令行工具,专为快速创建本地化App Store截图而设计。通过简单的命令行指令,开发者可以轻松实现截图的批量处理、多语言本地化和自动化生成,极大提升移动应用上架效率。 ## 为什么选择ScreenshotFramer CLI? 在移动应用开发流程中,准备App Store截图往往是一项繁琐且重复的工作。ScreenshotFramer

gitblog_00555的博客 957

LVGL 实战:倒计时翻页钟

环境:LVGL 9.x + PC 模拟器。每个数字做成上下两半的卡片,秒变时用绕中缝翻页:上半旧页折叠下去、下半新页展开上来,配合阴影遮罩做出立体感。从 02:00 倒计时到 0,闪一下再重置。界面文案用英文(默认字体无中文)。

摸鱼专家 213

学Simulink——基于高渗透率可再生能源微电网的逆变器系统场景实例:含高比例逆变型电源的微电网暂态稳定性分析

本文详细介绍了基于MATLAB/Simulink的高渗透率可再生能源微电网建模方法,重点分析含高比例逆变型电源的微电网暂态稳定性问题。通过构建包含光伏、风电、逆变器和电网等模块的系统模型,展示了从项目创建、模块搭建到控制策略实现的完整过程。文章特别提供了逆变器PQ控制算法和故障处理逻辑的代码示例,并介绍了仿真参数设置与结果分析方法。该模型能有效评估微电网在故障条件下的动态响应特性,为优化逆变器控制策略提供依据,对现代智能电网研究具有重要意义。

xiaoheshang_123的博客 140

Asspp安装全攻略:从零开始配置你的多账户App Store环境

Asspp(GitHub 加速计划)是一款专为多账户生态系统设计的App Store工具,它能够帮助用户高效管理多个应用商店账户,实现应用的快速下载与安装。本教程将带你从零开始,完成Asspp的安装与配置,轻松打造属于你的多账户应用管理中心。 ## 准备工作:了解Asspp的核心功能 在开始安装前,让我们先了解一下Asspp的主要功能。Asspp提供了直观的用户界面,支持多账户管理、应用搜索、

gitblog_00006的博客 393

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Rust By Practice 实战:字符、布尔与单元类型(Char, Bool and Unit)完整习题精讲

本文以 Rust By Practice(Rust 语言实战练习)的 [基础类型章节之 Char, Bool and Unit](https://link.gitcode.com/i/45df9af5f5bb96284e2d6e95aafa443f) 为主体,系统讲解 Rust 三大基础标量类型——字符(`char`)、布尔(`bool`)与单元类型(`()`)的底层原理、内存布局与典型陷阱,并逐

gitblog_00531的博客 204

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

如何免费绕过iOS激活锁:AppleRa1n图形化工具终极指南

你是否曾经遇到过这种情况:购买了一部二手iPhone,却因为激活锁无法使用?或者忘记了Apple ID密码,设备变成了"砖头"?AppleRa1n正是为解决这些iOS激活锁问题而生的免费开源工具,专为iOS 15-16系统设备提供激活锁绕过方案。这款图形化工具将复杂的命令行操作转化为简单点击,让普通用户也能轻松完成iOS设备解锁。 ## 📱 激活锁问题的真实困境 想象一下这些常见场景: *

gitblog_00639的博客 179

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ScreenshotFramer完整教程:5步掌握本地化App Store截图制作

ScreenshotFramer是一款高效的本地化App Store截图制作工具,帮助开发者快速创建符合多语言市场需求的应用截图。无论是iPhone、iPad还是其他iOS设备,都能通过简单的操作生成专业级别的应用展示图片,极大提升应用在全球市场的吸引力。 ## 一、工具简介:为什么选择ScreenshotFramer? 在全球化应用推广中,本地化截图是提升用户转化率的关键因素。Screens

gitblog_00369的博客 622

我做了一款给独居长辈用的 iPhone App:从需求到上架

异地家庭需要的未必是更多监控,而可能只是一个足够简单、能够每天坚持的主动报平安动作。本文复盘我开发「安心报平安」的过程:如何把模糊的家庭担心收敛成单一任务,如何围绕适老化删减功能,以及为什么选择本机存储、每日提醒和 iPhone 系统邮件。文章也如实说明产品边界:邮件必须由用户在系统邮件界面亲自确认发送,App 不会自动漏签报警、不能定位,也不是医疗或急救工具。

Magic-ZYJ的博客 229

iPhone App开发实战手册

《iPhone App开发实战手册》基本信息作者: (美)霍肯伯里(Hockenberry,C.)译者: 高京 历勤勇 施迪宏出版社:电子工业出版社ISBN:9787121176340上架时间:2012-9-13出版日期:2012 年8月开本:16开页码:320版次:1-1所属分类: 计算机更多关于 》》》《iPhone App开发实战手册》内容简介书籍计算机书籍  目前市面上不乏iphone应用...

weixin_34148340的博客 223

iOS- iPhone App 如何运营?

在质量过硬的情况下,如何运营才能使APP冲上app store的推荐?如何获得公众认可?获得下载量?   睡前简单分享一下最近从书中、互联网中浏览到的一些信息,和自己的一点理解。 首先这个问题很大。就抛砖引玉的说说, 运营这样一个岗位包含的内容很杂,有渠道推广、数据分析、产品包装、活动策划等等。 在2012年到2013年这两年,事实上,各家公司的运营核心是放在渠道上,对产品的真正...

alexhua1444的博客 2378

App Store Connect新手指导

本文专门给新人上手用,熟手轻拍砖。 App Store Connect App Store Connect是一套以网页为基础的工具,用于管理在App Store上销售的面向 iPhone、iPad、Mac、Apple Watch、Apple TV和 iMessage 的 app。作为Apple DeveloperProgram 的成员,我将使用App Store Connect提交和管理 app,邀请用户使用 TestFlight 进行测试,添加税务和银行信息,以及访问销售报告等。 新...

长兴的博客 8342

ScreenshotFramer实战案例:为iOS应用创建多语言App Store截图的最佳实践

在全球化应用开发中,本地化的App Store截图是吸引不同地区用户的关键。ScreenshotFramer作为一款高效的开源工具,能够帮助开发者快速生成多语言、多设备的应用截图,显著提升上架效率。本文将通过实战案例,详细介绍如何使用ScreenshotFramer实现iOS应用截图的批量本地化处理。 ## 为什么选择ScreenshotFramer? ScreenshotFramer是一款专

gitblog_00115的博客 1094

iPhone老机型免费体验动态岛:原理、工具与实操指南

动态岛(Dynamic Island)是苹果在iPhone 14 Pro系列上引入的软硬件结合交互设计,它通过将前置摄像头和传感器区域转化为一个可动态显示信息和响应交互的黑色区域,实现了通知、活动状态与硬件形态的巧妙融合。从技术原理上看,这本质上是系统UI层与硬件传感器数据的深度整合,通过实时动画和触控反馈,提升了多任务处理和信息获取的效率。对于广大开发者而言,理解其背后的通知框架、动画引擎和硬件抽象层,有助于设计更流畅、更沉浸的用户界面。虽然原生动态岛依赖于特定的硬件布局,但通过软件模拟的方式,开发者可以

weixin_34347651的博客 325

看看成功例子 四款iPhone音乐APP应用赏析

转载自:http://dev.yesky.com/416/30476416.shtml   伴随着手机,尤其是智能手机的快速发展,已经有越来越多的数码产品逐渐被取代,其中之一就包括曾经几乎人手一台的MP3等随身音乐设备。时至今日,越来越多的用户都已经开始将手机作为首选随身音乐播放设备,而在这样的一个环境下,一款好用的音乐播放应用就显得尤为重要了。作为目前最为流行的智能手机,相信不少使用苹

客亦知夫水与月乎? 2012

终极指南:如何使用ScreenshotFramer快速创建专业级App Store截图

ScreenshotFramer是一款强大的工具,专为开发者和设计师打造,能够帮助你轻松创建本地化的App Store截图,让你的应用在众多竞品中脱颖而出。无论你是开发新手还是经验丰富的专业人士,都能通过本指南快速掌握使用技巧,提升截图制作效率。 ## 为什么选择ScreenshotFramer? 在竞争激烈的App Store中,一张精美的截图往往能决定用户是否下载你的应用。Screensh

gitblog_00036的博客 612
上一篇: AFNetworking速成教程(全)
下一篇: 如何结合使用Cocos2d和UIKit
Vjsplus
博客等级 码龄13年 1粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值