在iOS上本地化剪切|复制|粘贴菜单

时间:2012-06-27 11:16:23

标签: objective-c ios cocoa-touch localization plist

我有一些问题本地化我所做的丹麦应用程序。 (语言,而不是糕点)

我已经在我的info.plist中将CFBundleDevelopmentRegion设置为da_DK for danish,但是显示文本输入的弹出窗口仍然是英文版,即使在运行丹麦操作系统的手机上也是如此。

enter image description here

如何在乔布斯名称中更改此内容?

测试设备是运行iOS 5.1的非越狱iPhone 4S,其中包括丹麦语作为其iOS设置,以及丹麦语itunes帐户。

我不使用.xibs进行设计。所有接口都被编程为视图控制器。

6 个答案:

答案 0 :(得分:35)

在Xcode的文件树(Project Navigator)中选择您的项目。在右侧窗格中再次选择您的项目。选择信息并添加您的语言。

configure i18n


我创建了一个sample project,结果就是这样:

enter image description here

答案 1 :(得分:5)

您可以直接在info.plist中执行此操作。像这样:

<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleLocalizations</key>
<array>
  <string>en</string>
  <string>de</string>
  <string>es</string>
  <string>ja</string>
</array>    

答案 2 :(得分:3)

尝试将Info.plist中的“Localized resources may mixed”标记添加/设置为YES。

答案 3 :(得分:2)

您必须使用丹麦语本地化您的应用,才能使标准UI元素以该语言显示。这是为了避免使用具有混合语言的UI。

如果您不使用xib,通常会通过向项目添加Localizable.strings文件来执行此操作。在Xcode的“添加文件”对话框中,您可以使用“字符串文件”模板(在“资源”下)进行此操作。

要实际本地化字符串文件,请打开文件检查器( 1),然后单击“本地化”部分中的+按钮。您最终会在项目导航器中将该文件显示为一个组,并为每种语言提供一个子条目。

字符串文件的格式为:

"Label_Text" = "Smørrebrød";

(别忘了分号)

要在代码中使用本地化字符串,您可以使用NSLocalizedString宏,如下所示:

myLabel.text = NSLocalizedString(@"Label_Text", nil);

(第二个参数用于评论。如果您使用genstrings工具从代码中提取可本地化的字符串并将结果文件提供给专业翻译,这将非常有用。)

如果您使用英文字符串作为键,则可以将Localizable.strings的英文版留空(但不要将其删除)。

使用用户所选语言的Localizable.strings文件也会导致标准UI元素(如编辑菜单,照片选择器等)以该语言显示。

答案 4 :(得分:2)

如果你不能按照@vikingosegundo提供的官方方式使用它,你可以通过一些创造性工程来做到这一点(创造性,因为我的上帝,这是危险的)。当我意外地覆盖[NSBundle localizedStringForKey:value:tableName:]时,我发现了这种方法。

1)使用以下方法向NSBundle添加类别:

#import <objc/runtime.h>

+ (void) load  {
    Method original, swizzled;

    original = class_getInstanceMethod(self, @selector(localizedStringForKey:value:table:));
    swizzled = class_getInstanceMethod(self, @selector(swizzled_localizedStringForKey:value:table:));
    method_exchangeImplementations(original, swizzled);
}

- (NSString*) swizzled_localizedStringForKey:(NSString *)key value:(NSString *)value table:(NSString *)tableName {

    NSLog(@"Key: %@. Value: %@", key, value);

    return [self swizzled_localizedStringForKey: key value:value table:tableName];
}

2)我只需记录键/值,你想放一个if([key isEqualToString:xxx])块。在那里,您想要捕获(至少一些)以下键值:剪切,复制[菜单],选择,全选,粘贴,删除[菜单],替换...,定义,说出,暂停。这些是可以在那里出现的默认值。

3)当您捕获了值时,您可以在自定义表中查找或使用硬编码值。如果你在自定义表中查找,请确保你的混合方法中有一个catch,以避免在自定义表中无限循环。

NB:你为什么需要调酒?因为这会为你的应用程序覆盖所有Apple文本。您仍然需要所有其他字符串的默认值,因此您需要调整以获取您不感兴趣的字符串的默认值。

祝你好运。 保罗

答案 5 :(得分:-1)

搜索您的.xib是否已本地化(您将在右侧面板上的检查器中找到它)如果是,请转到您的项目/目标设置按+ - 签名并选择&#34;复制英语到丹麦&#34;或者意思相同的东西(我现在无法检查正确的项目)

它被称为iPhone 4S。