我如何本地化uipickerview标题/文本

时间:2013-07-15 20:37:26

标签: iphone ios localization nslocalizedstring

我正在努力本地化我的应用并在我的代码中添加NSLocalizedString(),其中字符串将显示在屏幕上。问题是我有UIPickerview显示12项,我想本地化它,而不是在核心数据中添加不同的语言字符串。 这就是我现在返回的标题。我该如何本地化?

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    return [self.items objectAtIndex:row];
}

这会起作用吗?

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    NSString *localizedTitle = [NSString stringWithFormat:NSLocalizedString(@"%@", @"Item Name"),[self.items objectAtIndex:row]];
    return localizedTitle;
}

我应该只列出Localizable.strings文件中的所有项目?

提前致谢!

2 个答案:

答案 0 :(得分:0)

NSLocalizedString不适用于核心数据。 NSLocalizedString是用于从本地化文件获取键值的宏。

因此,如果您想从Core Data获得正确的单词,首先需要获取iOS中使用的当前语言。像这样:

NSString * language = [[NSLocale preferredLanguages] objectAtIndex:0];

然后你需要使用 NSFetchRequest 来返回所选语言的正确单词。 如果您的UI有很多标签,按钮等,您将进行大量的提取。由于 NSFetchRequest 应该是异步的,因此如果首次显示视图时标签中没有文本,则看起来很奇怪。所以我的问题是你确定要使用核心数据进行本地化吗?你总是可以尝试在主线程上进行抓取,但你的UI肯定会冻结。

答案 1 :(得分:0)

当你进行本地化时,用户看到的任何字符串,无论它的一部分是哪个UI组件,都应该在Localizablestrings中。

您的选择器中的每个可能的项目都应该在Localizable.strings中有一个条目。 NSLocalizedString只是一个用于从Localizable.strings加载字符串的宏。

完成后,您只需将.strings提交至SmoothLocalize.com或类似服务,然后将结果拖回应用中。