我正在努力本地化我的应用并在我的代码中添加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文件中的所有项目?
提前致谢!
答案 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或类似服务,然后将结果拖回应用中。