【发布时间】:2013-02-15 09:58:34
【问题描述】:
目前,我有三个独立的 .strings 文件 - 分别用于英语、法语和德语。
我在首选项部分有一个UISegmentedControl,我想根据选择的段更改默认使用的.strings 文件。
当我测试它时,本地化已经在应用程序之外工作,我什至设法根据选择的段来本地化单个对象(如果选择了法国,下面的标签文本从“South”变为“Sud” ,如果重新选择英语,则再次返回)使用:
if(German segment) {
NSString *path= [[NSBundle mainBundle] pathForResource:@"de" ofType:@"lproj"];
NSBundle* languageBundle = [NSBundle bundleWithPath:path];
// Returns german version of localised string as label text.
self.defaultName.titleLabel.text = [languageBundle localizedStringForKey:@"PREF_WEATHER_NORTH" value:@"" table:nil];
// I would like to set the default .strings file to 'de' here.
}
else if(French segment) {
NSString *path= [[NSBundle mainBundle] pathForResource:@"fr" ofType:@"lproj"];
NSBundle* languageBundle = [NSBundle bundleWithPath:path];
// Returns french version of localised string as label text
self.defaultName.titleLabel.text = [languageBundle localizedStringForKey:@"PREF_WEATHER_NORTH" value:@"" table:nil];
// I would like to set the default .strings file to 'fr' here
}
else if(British segment) {
NSString *path= [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
NSBundle* languageBundle = [NSBundle bundleWithPath:path];
// Returns english version of localised string as label text
self.defaultName.titleLabel.text = [languageBundle localizedStringForKey:@"PREF_WEATHER_NORTH" value:@"" table:nil];
// I would like to set the default .strings file to 'en' here.
}
现在,由于我已经在单击按钮时本地化了单个字符串,我想知道是否可以一次性本地化每个 .strings 文件中的 ALL 字符串(这样我'正在更改使用的默认 .strings,具体取决于所选的段)或至少在可接受的代码量中尽可能多地定位。
显然,目前我可以一个接一个地键入它们,但由于应用程序中使用的本地化字符串的数量,这并不是一个真正的选择。
任何帮助将不胜感激。
【问题讨论】:
-
“我想知道是否可以本地化每个文件中的所有字符串”,您能澄清一下吗?您是否意味着选择语言段时,在整个应用程序中的所有字符串都会更新? span>
-
@WDUK 就是这样。应用程序中几乎所有的字符串都是 NSLocalizedStrings,并且一次性更改所有字符串,会将应用程序中几乎所有字符串的显示更改为该特定语言。
-
.. 或者...你可以使用不同的 XIB/Storyboard.. :) stackoverflow.com/a/14742213/1702413
标签: iphone ios objective-c cocoa-touch localization