如何本地化一款iPhone App.docx
- 文档编号:29201247
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:22
- 大小:829.86KB
如何本地化一款iPhone App.docx
《如何本地化一款iPhone App.docx》由会员分享,可在线阅读,更多相关《如何本地化一款iPhone App.docx(22页珍藏版)》请在冰豆网上搜索。
如何本地化一款iPhoneApp
如何本地化一款iPhoneApp
这篇文章还可以在这里找到 英语, 俄语
Ifyou'renewhere,youmaywanttosubscribetomy RSSfeed orfollowmeon Twitter.Thanksforvisiting!
本篇教程是由SeanBerry发布的,他是一位电脑达人,在AlgebraTouch做开发工作。
MeGustaLocalization!
虽说目前以英语为主的App的市场是最大的,但是世界上还是有很多非英语的用户,可以通过提供本地语言的支持来极大地提升他们的用户体验。
好消息是Apple已经为我们提供了一套简单易用的,Xcode集成的API方法,来为App增加多语言支持。
这个过程称为本地化,这就是本期教程我想要教给大家的!
在本篇教学中,你将要本地化一款我准备好的示例app,我受到Ray的这篇in-apppurchases中的暴走漫画的启发制作的这个app。
这个app非常简单–当你点击‘YouLike?
’时,一个笑脸出现并缩放,最终渐隐消失。
但是目前它只支持英语,所以vamosatraducir!
(西班牙语,意思为“我们要翻译了!
”)
本教程使用Xcode4,所以如果你还没升级它,为什么不借此机会升级呢?
准备开始
第一步请先下载iLikeIt初始工程,我们将要在之后的教程中将它本地化。
编译并运行,你将会看到如下所示:
我们有3个需要本地化的项目,它们是:
∙标题文字:
‘Hello!
’
∙UI元素:
’Youlike?
’按钮
∙最后是那个图片(它上边有文字!
)
将文字从代码中剥离
和大多数项目一样,本项目也将字符串写死在代码中。
我们需要将这些写死的字符串从代码中剥离出来,这样才能本地化它们。
在Xcode中实现此功能是通过新建一个后缀为“.strings”的文件,让其包含项目需要的字符串。
然后把之前写死的字符串,使用适当的函数调用,替换为“.strings”文件中相应的字符串。
我们这就试试看。
在Xcode中选择iLikeItgroup,然后选择FileNewNewFile。
选择iOSResourceStringsFile,点击Next,如下图所示。
将其命名为Localizable.strings,点击Save。
注意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并选择JumptoDefinition。
你会发现它是如下定义的:
#defineNSLocalizedString(key,comment)
[[NSBundlemainBundle]localizedStringForKey:
(key)value:
@""table:
nil]
本质上地,它是调用了localizedStringForKey方法根据给定的key查找当前语言对应的字符串。
它的table参数为nil,所以它会使用默认的strings文件名(Localizable.strings)。
想获得更多的内容,请参考Apple的NSBundleClassReference。
还有一个值得注意的事。
这个宏使用了一个叫做comment的参数,但是看起来它并没有做任何事儿!
这是因为除了在Localizable.strings手动输入key/pair的方法外,还有一种通过使用iPhoneSDK提供的工具自动生成字符串的方法,对于大项目来说,这种方法非常方便。
如果你使用了此方法,你可以为每一个字符串添加一个comment作为翻译者的辅助参考说明。
例如,你可以注明这个字符串是在什么上下文位置使用的。
背景知识已经介绍足够多了,我们这就试试看!
编译并运行项目,它会像往常一样在主屏幕显示“Hello!
”。
但是西班牙语版的在哪儿呢?
我们已经把准备工作做的很充足了,这一步会很容易。
添加西班牙语本地化支持
首先选择Localizable.strings,然后打开Info面板。
完成这一步你需要点击Xcode界面顶部的工具栏的第三项打开属性界面,然后选择顶部的第一个tab页,如下所示:
添加另一种语言支持的步骤为,首先点击右侧的‘Localization’面板中的‘+’按钮。
第一次会创一个英语的localization。
注意再你执行完此步骤后有可能失去对Localizable.strings的选择,再次选择它,再次点击‘+’按钮,从下拉列表中选择‘Spanish(es)’
到此为止,Xcode已经为每种语言创建了各自版本的Localizable.strings。
如果你想看看它是怎么在幕后工作的,在Finder中打开此项目,你会看到如下内容:
看到‘en.lproj’和‘es.lproj’了吗?
它们包含了每种语言特定的版本的文件。
‘en’是English的本地化编码,‘es’是Spanish的本地化编码。
如果你对此感到好奇,这是语言编码详细列表。
当iOS想要得到英语版本的文件时,它会从en.lproj中寻找,如果它想得到西班牙语版本的文件就会从es.lproj中去找。
就是这么简单!
把你的资源放到合适的文件夹中,iOS会替你完成余下的工作。
回到Xcode并点击Localizable.strings的下箭头,让它显示出子项目。
你会看到我们正在使用两个版本的文件:
点击‘Localizable.strings(Spanish)’并把文本替换成以下内容:
"TITLE"="Hola!
";
你的app现在更加世界化了!
我们这就试试看这个功能是否工作正常…
进入Settings(设置)程序,选择General(通用)->International(多语言环境)->Language(语言)->Espanol,就可以让模拟器显示出西班牙文了。
删除app并选择ProjectClean来执行一次全新的编译和安装。
当你编译并运行后你会看到Hola!
的字样:
调整UI元素
接下来要本地化的是按钮上的文字。
西班牙语对应的内容应该为‘~Esbueno?
~’
这个出现了一个问题,我们想让按钮的宽度与按钮上的文字保持一致。
对于标题label来说,这并不是问题,因为它没有宽度边界限制。
但是对于按钮我们需要调整它的尺寸以让它看起来更好。
如果我们只是修改viewDidLoad中的文字,它会看起来很烂,如下图所示:
完全不可接受!
所以我们要添加一个本地化的xib,来让按钮在西班牙语模式下更宽。
选择iLikeItViewController.xib并在右侧的info面板中,点击‘+’按钮添加一个本地化并选择Spanish。
注意你可能需要向下滑动Info面板以让其显示,因为它会共享其他的一些InterfaceBuilder的内容。
现在我们在Spanish文件夹(es.lproj)中有了iLikeItViewController.xib的一份copy。
选择iLikeItViewController.xib(Spanish),把按钮上的文字改为‘~Esbueno?
~’(默认地它会自动调整按钮的大小)。
小技巧:
想要在Mac上输入例如朝下的问号这种特殊字符,方法是前往SystemPreferences(系统偏好设置)Keyboard(键盘),并选择ShowKeyboard(显示键盘)&CharacterViewerinmenubar(显示字符显示程序)。
你会看到一个新的选项出现在你的菜单栏中,如下所示:
你可以使用它来浏览特殊字符,双击来选择它到你的app中,包括Xcode。
当你设置完成你的label后,删除app并再次通过ProjectClean重新编译安装(你也许需要重启Xcode才能让这些新设置生效)。
然后编译并运行你会看到如下所示:
图片
我们在图片中也有文字所以我们要本地化它。
在一个西班牙语的app中有些英语会先得很外行。
选择‘ilike.jpg’并添加一个Spanish的localization(你应该已经很熟悉这个步骤了!
)
检查一下项目文件夹,‘ilike.jpg’已经在English文件夹(en.lproj)中了并且Spanish文件夹(es.lproj)中也有一份拷贝。
为了让西班牙版本的图片有所不同,我们只需要简单地把西班牙文件夹中的图片替换掉。
请下载以下图片:
我也在起始工程中保存了一份,名字为megusta.jpg。
将其重命名为ilike.jpg并把它移动到Spanish文件夹(es.lproj)中,覆盖掉原来的文件。
Clean并重新编译就大功告成了!
恭喜!
你已经学会了本地化的大部分内容了。
免费额外奖励
如果你想翻译app的名字该怎么办呢?
你的Info.plist指定了一个特殊文件,在这里你可以为app指定不同语言的名字。
所以我们给他起一个不同的西班牙语名字,对SupportingFiles中的InfoPlist.strings文件添加本地化并选择Spanish版本:
"CFBundleDisplayName"="MeGusta";
这样就可以改变在Springboard中app的名字了。
…当本地化时这里遇到了一个问题。
英文版本的名字有个‘i’前缀(和苹果的命名习惯保持一致的)。
但当翻译为西班牙版本时,这个笑点就不复存在了。
其实,这是一个很糟的笑话,西班牙版本的名字必然它更好!
何去何从?
这是到目前为止的示例工程,其中包含以上所有的代码。
现在你了解了本地化一款iPhoneapp的基本技术了,试着再制作你的下一款app时使用它。
这样做会让非英语的用户非常愉悦!
对于翻译本身来说,你可能目前使用的Google的免费的翻译服务在
如果你有任何问题或者对他人的本地化有什么建议,欢迎加入下方的讨论区!
本篇教程是由SeanBerry发布的,他是一位电脑达人,在AlgebraTouch做开发工作。
∙Tweet
∙
RayWenderlich
RayisanindiesoftwaredevelopercurrentlyfocusingoniPhoneandiPaddevelopment,andtheadministratorofthissite.He’sthefounderofasmalliPhonedevelopmentstudiocalledRazeware,andispassionatebothaboutmakingappsandteachingothersthetechniquestomakethem.WhenRay’snotprogramming,he’sprobablyplayingvideogames,roleplayinggames,orboardgames.
∙FollowRayonTwitter
HowToLocalizeaniPhoneAppTutorial
Thispostisalsoavailablein:
Chinese(Simplified), Russian
Ifyou'renewhere,youmaywanttosubscribetomy RSSfeed orfollowmeon Twitter.Thanksforvisiting!
Thisisaguestpostby SeanBerry,adeveloperof mathappsforiPhone,iPad,andiPodTouch.
MeGustaLocalization!
AlthoughtheEnglish-speakingAppStoremarketisthelargest,therearestillplentyofotheriPhoneusersintheworldandyoucangreatlyincreasetheiruserexperiencebysupportingtheirnativelanguage.
ThegoodnewsisApplehasmadeitveryeasytomakeyourappsworkwithmultiplelanguagesthroughsomeAPIcallsandbuilt-inXcodesupport.Theprocessofdoingthisiscalledlocalization,andthat’swhatI’llbeshowingyouhowtodo!
InthisiPhoneapptutorial,youwillbelocalizingasampleappIpreparedcallediLikeItwhichwasinspiredbytheragecomicsinRay’spostaboutin-apppurchases.Theappisverysimple–itdisplayssomeidealsalesdata,andwhenyoutap‘Youlike?
’afaceappears,scalesup,andfadesaway.
Butrightnowit’sEnglishonly–sovamosatraducir!
ThisiPhoneapptutorialwillbeusingXcode4.6.1,soifyouhaven’tupgradedalready,whynotusethisasanexcusetodoso?
GettingStarted
Thefirststepisto downloadtheiLikeItstarterproject thatwe’llbelocalizinginthisiPhoneapptutorial.
BuildandRuntheapp,andyoushouldseethefollowingappearafteryoutap‘Youlike?
’:
Wehave3thingstolocalizehere:
∙Text:
salesdata
∙UIElement:
‘Youlike?
’button
∙andfinallytheimage(ithastext!
)
Separatingtextfromcode
Likemostprojects,thisprojecthassomehardcodedstringsinthecode.Weneedtopullallofthesehardcodedstringsintoaseparatefilesowecanlocalizethem.
ThewayyoudothisinXcodeiscreatea“.strings”filetocontainallofthestringsyourprojectsneeds.Thenyou’llreplacethehardcodedstringswithafunctioncalltolookuptheappropriatestringfromthe“.strings”filebasedonthecurrentlanguage.
Let’strythisout.Goto File\New\NewFile.Choose iOS\Resource\StringsFile,andclick Next,asshowninthescreenshotbelow.Namethenewfile Localizable.strings,andclick Save.
Notethat Localizable.strings isthedefaultfilenameiOSlooksforwhendealingwithlocalizedtext.Ifyoudon’tusethis,you’llhavetospecifythenameofour.stringsfileeverytime.
Theformatforthestringsfileis:
"KEY"="CONTENT";
Soforour‘Yesterdayyousold%@apps’and‘Youlike?
’textaddin:
"Yesterdayyousold%@apps"="Yesterdayyousold%@apps";
"Youlike?
"="Youlike?
";
Nowswitchto ViewController.m,andfindthe viewDidLoad method.Rightnowitsetsthetextas:
self.numAppsLabel.text=[NSStringstringWithFormat:
@"Yesterdayyousold%@apps",@(1000000)];
[self.likeButtonsetTitle:
@"Youlike?
"forState:
UIControlStateNormal];
Wewantittoinsteadreadfromour.stringsfile.Todothat,changethecurrentlinetouseamacrocalledNSLocalizedString asshownbelow:
self.numAppsLabel.text=[NSStringstringWithFormat:
NSLocalizedString(@"Yesterdayyousold%@apps",nil),@(1000000)];
[self.likeButtonsetTitle:
NSLocalizedString(@"Youlike?
",nil)forState:
UIControlStateNormal];
Ifyou’recuriouswhatthe NSLocalizedString macrodoes,control-clickon NSLocalizedString andchoose JumptoDefinition.You’llfindthatit’sdefinedasfollows:
#defineNSLocalizedString(key,comment)\
[[NSBundlemainBundle]localizedStringForKey:
(key)value:
@""table:
nil]
Sobasically,it’susingthe localizedStringForKey methodtolookupthestringforthegivenkey,inthecurrentlanguage.Itpassesnilforthetablename,soitusesthedefaultstringsfilename(Localizable.strings).Forfulldetails,checkoutApple’s NSBundleClassReference.
Oneotherthingtonote.Themacrotakesacommentasaparameter,butseemstodonothingwithit!
Thisisbecauseinsteadofmanuallytypingineachkey/valuepairinto Localizable.strings likewe’vebeendoing,youcanuseatoolthatcomeswiththeiPhoneSDKcalled genstrings todothisautomatically(whichcanbequiteconvenientforlargeprojects).
Ifyouusethismethod,youcanputacommentforeachstringthatwillappearnexttothedefaultstringsasanaidforthetranslator.Forexample,youcouldaddacommentindicatingthecontextwherethestringisused.
Enoughbackgroundinfo–let’stryitout!
Buildandrunyourproject,anditshouldsaythesametextonthemainscreenjustasbefore.Butwhere’stheSpanish?
Nowthatwe’resetupit’sacinch.
AddingaSpanishLocalization
Toaddsupportforanotherlanguage,clickontheblue
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 如何本地化一款iPhone App 如何 本地化 一款 iPhone