我正在尝试找到一种可管理的方式来翻译iPhone应用程序中的每个可见字符串。官方苹果文档说使用.strings文件编写程序字符串,同时使用内置的“添加本地化文件”。 xcode中的选项可以本地化nib文件。

我看到的问题是,如果UI在本地化发生后需要更改,那么我们需要单独更新每种语言的nib,这不是最佳的。是否有更简单的方法可能将nib文件中显示的字符串绑定到.strings文件中的相关值?或者我是否必须以编程方式为每个ui元素设置这些字符串(这稍微好些但仍然很烦人)?

有帮助吗?

解决方案

您可以做的最好的事情是递归遍历每个视图,然后在其上设置文本:

static void translateView(NSBundle *bundle, UIView *view)
{
    id idView = view;
    if ([idView respondsToSelector:@selector(text)] && [view respondsToSelector:@selector(setText:)])
        [idView setText:[bundle localizedStringForKey:[idView text] value:nil table:nil]];
    if ([idView respondsToSelector:@selector(title)] && [view respondsToSelector:@selector(setTitle:)])
        [idView setTitle:[bundle localizedStringForKey:[idView title] value:nil table:nil]];
    if ([idView respondsToSelector:@selector(placeholder)] && [view respondsToSelector:@selector(setPlaceholder:)])
        [idView setPlaceholder:[bundle localizedStringForKey:[idView placeholder] value:nil table:nil]];
    if ([idView respondsToSelector:@selector(prompt)] && [view respondsToSelector:@selector(setPrompt:)])
        [idView setPrompt:[bundle localizedStringForKey:[idView prompt] value:nil table:nil]];
    if ([idView respondsToSelector:@selector(titleForState:)] && [view respondsToSelector:@selector(setTitle:forState:)])
        [idView setTitle:[bundle localizedStringForKey:[idView titleForState:UIControlStateNormal] value:nil table:nil] forState:UIControlStateNormal];
    if ([idView isKindOfClass:[UITabBar class]] || [idView isKindOfClass:[UIToolbar class]])
        for (UIBarItem *item in [idView items])
            [item setTitle:[bundle localizedStringForKey:[item title] value:nil table:nil]];
    for (UIView *subview in [view subviews])
        translateView(bundle, subview);
}

警告:您可能必须检查其他选择器组以捕获所有内容。这不是最佳做法,但似乎工作要少得多

其他提示

Apple的内置命令行程序ibtool可以让你这样做。您可以从XIB转储字符串,对它们进行本地化,然后基于现有的XIB创建新的XIB,但使用本地化的字符串。因此,您可以随时拥有一组XIB,并在本地化字符串更改时重新创建它们。更多信息: http://www.bdunagan.com/ 2009/03/15 / ibtool定位制成易/

我想你想了解一下命令行工具:ibtool。它应该简化你想要做的事情。

您可以按照以下简单指南自动本地化您的笔尖而不会复制它们:

http://programminghacks.net/2011 / 06/03 / IOS-笔尖定位-在本地化的串/

也许你应该手动更新每个字符串。假设您有一个不同语言的字符串数组或xml文件,当用户更改语言时,只需从数组中获取已翻译的字符串,然后将其更改为UI。

我总是在viewDidLoad()方法中设置所需的所有字符串,只在.xib中有占位符。这样我只需更新.string文件即可轻松本地化任何.xib

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top