本地化iOS上的剪切|复制|粘贴菜单
我有一些本地化丹麦应用程序的问题。 (语言,而不是糕点)
我已经在我的info.plist中将CFBundleDevelopmentRegion设置为da_DK作为丹麦语,但是出现文本input的popup窗口仍然是英文,即使是在运行丹麦语操作系统的手机上。
乔布斯的名字如何改变这个?
该testing设备是一个非越狱iPhone 4S运行iOS 5.1与丹麦作为其iOS设置,并与丹麦iTunes帐户关联。
我不使用.xibs进行devise。 所有接口都被编程为视图控制器。
在Xcode的文件树(Project Navigator)中select你的项目。 在右侧窗格中再次select您的项目。 select信息并添加您的语言。
我创build了一个示例项目 ,这是结果:
您必须使用丹麦语本地化您的应用,以使标准用户界面元素以该语言显示。 这是为了避免使用混合语言的UI。
如果你不使用xibs,你通常需要在项目中添加一个Localizable.strings
文件。 在Xcode的“添加文件”对话框中,可以使用“string文件”模板(位于“资源”下)。
要实际定位string文件,请打开文件检查器( ⌥
)并单击“本地化”部分的+
button。 您将最终在项目导航器中将文件显示为一个组,每个语言都有一个子条目。
string文件的格式为:
"Label_Text" = "Smørrebrød";
(不要忘记分号)
要在代码中使用本地化的string,可以使用如下所示的NSLocalizedString
macros:
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。