0

我正在本地化我的应用程序并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 文件中的所有项目吗?

提前致谢!

4

2 回答 2

0

NSLocalizedString 不适用于Core Data。NSLocalizedString 是用于从本地化文件中获取键值的宏。

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

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

然后,您需要创建NSFetchRequest,它将为所选语言返回正确的单词。如果您的 UI 有很多标签、按钮等,您将进行大量获取。由于NSFetchRequest应该是异步完成的,如果在第一次显示视图时标签中没有文本,它可能看起来很奇怪。所以我的问题是你确定要使用Core Data进行本地化吗?您总是可以尝试在主线程上进行 fetch,但您的 UI 肯定会冻结。

于 2013-07-15T20:48:24.393 回答
0

本地化时,用户看到的任何字符串,无论它属于哪个 UI 组件,都应该在 Localizablestrings 中。

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

完成后,您只需将 .strings 提交到SmoothLocalize.com或类似服务,然后将它们给您的结果拖回您的应用程序。

于 2013-07-16T14:36:57.943 回答