2013-07-15 19 views
0

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

- (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

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

所以如果你想从核心数据得到正确的单词,首先你需要获得当前在iOS中使用的语言。就像这样:

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

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

+0

感谢您的回复!我不想使用核心数据进行本地化。我只想使用Localizable.strings进行本地化。这些单词将在应用程序中的很多不同位置使用,并且希望将其设置一次,并且不会在每种语言的核心数据中具有不同的表格 – Yan

+0

然后,最简单的方法是使Localizable.strings有这样的命令:picker_1_0 =“some_value”; picker_2_0 =“some_value”等。然后当UIPickerView的dataSource调用 - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)组件方法你用这种方式本地化NSLocalizedString(“”, NSString stringWithFormat:@“picker_%d_%d”,row,component]); 以这种方式使用它,您将拥有UIPickerView需要的方式订购的按键。 –

+0

这是否意味着所有的采集器将具有从字符串文件中获取的相同值? – Yan

0

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

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

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

+0

我会怎么做,在字符串文件。如果我只在字符串文件中添加“item1”=“项目语言”,但不会在选取器中显示 – Yan

+0

您是否正在使用数组加载选取器?如果是这样,你是否加载字符串,如NSLocalizedString(“字符串”,零)? – user1023127