Cocoa touch 如何本地化iPhone应用程序

Cocoa touch 如何本地化iPhone应用程序,cocoa-touch,localization,Cocoa Touch,Localization,我试图找到一个关于如何本地化iphone应用程序的分步教程。我有英语,我想加上法语。文档是可用的,但它几乎无法为您提供关于如何从头到尾实施它的清晰说明。下面是我正在寻找的逐步演练。它被发现了 希望它能像m一样帮助你们所有人 这是Sean Berry的客座帖子,他是iPhone、iPad和iPodtouch数学应用程序的开发者 我喜欢本地化! 虽然说英语的应用商店市场是最大的,但世界上还有很多其他iPhone用户,通过支持他们的母语,你可以大大提高他们的用户体验 好消息是,通过一些API调用和内置

我试图找到一个关于如何本地化iphone应用程序的分步教程。我有英语,我想加上法语。文档是可用的,但它几乎无法为您提供关于如何从头到尾实施它的清晰说明。

下面是我正在寻找的逐步演练。它被发现了 希望它能像m一样帮助你们所有人

这是Sean Berry的客座帖子,他是iPhone、iPad和iPodtouch数学应用程序的开发者

我喜欢本地化! 虽然说英语的应用商店市场是最大的,但世界上还有很多其他iPhone用户,通过支持他们的母语,你可以大大提高他们的用户体验

好消息是,通过一些API调用和内置的Xcode支持,苹果已经让你的应用程序很容易使用多种语言。这样做的过程称为本地化,这就是我将向您展示的方法

在本iPhone应用程序教程中,您将本地化我准备的一个名为iLikeIt的示例应用程序,它的灵感来自Ray关于应用程序内购买的帖子中的rage漫画。该应用程序非常简单——它显示一些理想的销售数据,当你点击“你喜欢吗?”时,一张脸就会出现、放大并消失。 但现在它只会说英语——所以瓦莫斯是一个传统主义者

本iPhone应用程序教程将使用Xcode 4.6.1,因此,如果您尚未升级,为什么不以此为借口进行升级

开始 第一步是下载我们将在本iPhone应用程序教程中本地化的。 构建并运行应用程序,点击“you like”(你喜欢)后,你会看到以下内容:

我们有三件事需要本地化: 文本:销售数据 UI元素:“你喜欢吗?”按钮 最后是图像(它有文本!) 从代码中分离文本 与大多数项目一样,此项目的代码中有一些硬编码字符串。我们需要将所有这些硬编码字符串拉入一个单独的文件中,以便对它们进行本地化

在Xcode中执行此操作的方法是创建一个“.strings”文件,以包含项目所需的所有字符串。然后,您将使用函数调用替换硬编码字符串,以根据当前语言从“.strings”文件中查找适当的字符串。 让我们试试这个。转到文件\新建\新建文件。选择iOS\Resource\Strings File,然后单击Next,如下面的屏幕截图所示。将新文件命名为Localizable.strings,然后单击“保存”

请注意,Localizable.strings是iOS在处理本地化文本时查找的默认文件名。如果不使用此选项,则每次都必须指定.strings文件的名称

字符串文件的格式为: “键”=“内容”; 因此,对于我们的“昨天你卖出了%@apps”和“你喜欢吗?”文本加载项: “昨天你卖了%@应用”=“昨天你卖了%@应用”

现在切换到ViewController.m,并找到viewDidLoad方法。现在,它将文本设置为: self.numAppsLabel.text=[NSString stringWithFormat:@“昨天你卖出了%@apps”,@(1000000)]

我们希望它从.strings文件中读取。为此,请将当前行更改为使用名为NSLocalizedString的宏,如下所示: self.numAppsLabel.text=[NSString stringWithFormat:NSLocalizedString(@“昨天你卖出了%@个应用程序”,无),@(1000000)]

如果您对NSLocalizedString宏的作用感到好奇,请控制单击NSLocalizedString并选择跳转到定义。您会发现它的定义如下:

#define NSLocalizedString(key, comment) \
[[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]
所以基本上,它使用localizedStringForKey方法在当前语言中查找给定键的字符串。它传递nil作为表名,因此它使用默认的字符串文件名(Localizable.strings)。有关详细信息,请查看Apple的NSBundle类参考

还有一件事需要注意。宏将注释作为参数,但似乎与之无关!这是因为您可以使用iPhone SDK附带的一个名为GenString的工具来自动执行此操作(这对于大型项目来说非常方便),而不是像我们所做的那样手动将每个键/值对键入Localizable.strings

如果使用此方法,则可以为将显示在默认字符串旁边的每个字符串添加注释,以帮助翻译器。例如,您可以添加一条注释,指示使用字符串的上下文。 足够的背景信息-让我们试试吧!构建并运行您的项目,它应该在主屏幕上显示与以前相同的文本。但是西班牙人呢?既然我们已经准备好了,那就很容易了

添加西班牙语本地化 要添加对另一种语言的支持,请单击左窗格中的蓝色iLikeIt项目文件夹,在下一窗格中选择项目(而不是目标),然后在“信息”选项卡下,您将看到本地化部分。单击+并选择西班牙语

您将看到另一个屏幕,询问您要本地化哪些文件,将它们全部选中,然后单击Finish。您还没有看到Localizable.strings,这没关系!我们很快就会解决的

此时,Xcode已经为您选择的每种语言设置了一些目录,其中包含InfoPlist.strings和MainstryBoard.storyboard的单独版本。要亲自查看,请在Finder中打开项目文件夹,您将看到以下内容:

参见en.lproj和es.lproj?它们包含我们特定语言版本的文件。 “en”是英语的本地化代码,“es”是西班牙语的本地化代码。如果你好奇的话,下面是完整的语言代码列表

当iOS想要获得文件的英文版本时,它将在en.lproj中查找,但是当它想要文件的西班牙文版本时,它将在es.lproj中查找

就这么简单!将您的资源放在适当的文件夹中,iOS将完成其余工作。 但是等等,Localizable.strings呢?出租
[self.likeButton setTitle:@"You like?" forState:UIControlStateNormal];
[self.likeButton setTitle:NSLocalizedString(@"You like?", nil) forState:UIControlStateNormal];
#define NSLocalizedString(key, comment) \
[[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]
"You like?" = "~Es bueno?~";
NSString *numberString = [numberFormatter stringFromNumber:@(1000000)];
self.numAppsLabel.text = [NSString stringWithFormat:NSLocalizedString(@"Yesterday you sold %@ apps", nil), numberString];