2011-10-14 36 views
3

我深入了解Apple开发人员的文档,以了解应用程序的本地化/国际化应该如何完成,并且我想了解Interface Builder如何帮助您管理多种语言的多个NIB文件......文档指向我到Interface Builder用户指南中的“本地化”部分,但我无法找到它..应该在Xcode 4文档中找到它吗?有人可以给我一个文档,告诉你如何在Interface Builder/XCode中实现本地化吗? “Interface Builder用户指南”在哪里?界面生成器本地化指南

在此先感谢。

PS:我是否应该从一开始就使用本地化的字符串/软件包来开始实施我的应用程序,即使我只从一种语言开始? “国际化”一种尚未用多种语言的支持开发的应用程序是否很痛苦?

回答

4

吉亚尼我认为你试图找到这个:

http://developer.apple.com/internationalization/

(更多的细节:http://developer.apple.com/library/ios/#documentation/MacOSX/Conceptual/BPInternational/BPInternational.html

你应该总是这一点启动的应用程序。因为后来,如果你的客户需要添加一种新语言,你将会有很多工作。即使这是应用程序只适合你,你应该使用它。除了学习如何做到这一点之外,您还要保持代码的灵活性,以便突然改变您的需求。

+1

对于一个没有经验的iOS开发人员来说,实现国际化似乎有点复杂......但是在阅读文档和尝试一个简单的测试应用程序之后,它可能会变得更加清晰:)谢谢您的答案! –

+0

Jacky,我有一个问题给你......如果我想从一开始就开始一个新的应用程序并将其国际化,是否需要“手动”或者我可以告诉Xcode以“国际化”应用?我对单视图应用程序有一定的经验,Xcode为你准备了nib文件和其他东西,我想知道我是否能告诉Xcode以一种可以轻松国际化的方式准备项目。我希望我的问题是非常清楚的。 –

+0

我已经看到有可能告诉Xcode国际化资源,所以我试图国际化xxx-info.plist文件,但代码无法编译,因为它确实不要在en.lproj目录中查找它,而是在基本目录中......我想我必须在理解如何正确管理这些东西之前仔细阅读文档..也许info.plist文件不需要是国际.. –

2

我同意以前对这些解决方案的复杂性的评论。因此,我刚刚创建了一个新工具,自动本地化您的IB文件。看看这里:https://github.com/angelolloqui/AGi18n

0

我写了一个简单的类别,用IB来处理本地化。

头文件看起来像这样。

@interface UIView (Localization) 

@property (nonatomic, strong) NSString *mainTextKey; 
@property (nonatomic, strong) NSString *secondaryTextKey; 

- (void)updateMainText; 
- (void)updateSecondaryText; 

@end 

实施

@implementation UIView (Localization) 


- (NSString *)mainTextKey{ 

    return objc_getAssociatedObject(self, @selector(mainTextKey)); 

} 

- (void)setMainTextKey:(NSString *)mainTextKey{ 

    objc_setAssociatedObject(self, @selector(mainTextKey), mainTextKey, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 
    [self updateMainText]; 


} 

- (NSString *)secondaryTextKey{ 

    return objc_getAssociatedObject(self, @selector(secondaryTextKey)); 

} 

- (void)setSecondaryTextKey:(NSString *)secondaryTextKey{ 

    objc_setAssociatedObject(self, @selector(secondaryTextKey), secondaryTextKey, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 
    [self updateSecondaryText]; 
} 

- (void)updateMainText{ 

    //handle all cases one by one 

    if([self isKindOfClass:[UILabel class]]){ 
     UILabel *label = (UILabel *)self; 
     label.text= NSLocalizedString(self.mainTextKey, nil) ; 
    }else if ([self isKindOfClass:[UIButton class]]){ 

     UIButton *btn = (UIButton *)self; 
     [btn setTitle:NSLocalizedString(self.mainTextKey, nil) forState:UIControlStateNormal]; 

    } 


} 
- (void)updateSecondaryText{ 
    //handle all cases one by one 

} 



@end 

基本用法:

  1. 创建一个UIView元素一样的UIButton或UIlable
  2. 指定对键 “mainTextKey” 你的字符串键内UserDefinedAttributes或 “secondaryTextKey” 。
  3. 运行该应用程序,它会从你的字符串文件中加载正确的文本。

这是没有任何证明的书面阅读,原谅任何愚蠢的错误。