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

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

我已经在我的info.plist中将CFBundleDevelopmentRegion设置为da_DK作为丹麦语,但是出现文本input的popup窗口仍然是英文,即使是在运行丹麦语操作系统的手机上。

在这里输入图像说明

乔布斯的名字如何改变这个?

该testing设备是一个非越狱iPhone 4S运行iOS 5.1与丹麦作为其iOS设置,并与丹麦iTunes帐户关联。

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

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

配置i18n


我创build了一个示例项目 ,这是结果:

在这里输入图像说明

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

如果你不使用xibs,你通常需要在项目中添加一个Localizable.strings文件。 在Xcode的“添加文件”对话框中,可以使用“string文件”模板(位于“资源”下)。

要实际定位string文件,请打开文件检查器( )并单击“本地化”部分的+button。 您将最终在项目导航器中将文件显示为一个组,每个语言都有一个子条目。

string文件的格式为:

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

(不要忘记分号)

要在代码中使用本地化的string,可以使用如下所示的NSLocalizedStringmacros:

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

(第二个参数是注释,如果你使用genstrings工具从你的代码中提取可本地化的string,并把结果文件给一个专业的翻译器,这会很有用。

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

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

如果你不能按照@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)在哪里我简单地logging键/值,你想要放一个if([key isEqualToString:xxx])块。 在那里,你想抓住(至less一些)下面的键值:剪切,复制[菜单],select,全选,粘贴,删除[菜单],replace…,定义,说话,暂停。 这些是可以在那里出现的默认值。

3)当你已经捕捉到的值,你可以在自定义表中查找或使用硬编码的值。 如果你在自定义表格中查找,请确保你的方法有一个捕获,以避免自定义表格中的无限循环。

注意:为什么你需要调整? 因为这覆盖所有苹果文本为你的应用程序。 你仍然需要所有其他string的默认值,所以你需要调整以获得你不感兴趣的string的默认值。

祝你好运。 保罗

尝试添加/设置Info.plist中的“本地化资源可混合”标志为YES。

您可以直接在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> 

search你的.xib是否已经本地化(你可以在右面板的检查器中find它),如果是这样,进入你的项目/目标设置按下+ -Sign,然后select“重复英语到丹麦语”或其他意思相同(我目前无法检查正确的项目)

顺便说一句,这就是所谓的iPhone 4S。