本地化给出了奇怪的行为,请指教

时间:2013-02-27 16:26:19

标签: ios objective-c localization nsstring

嗯,我不像我想象的那么聪明。 用一行代码挣扎一整天。

char latChar = (actLat > 0) ? 'N' : 'S';
NSString *latString = [NSString stringWithFormat:@"%c" , latChar];    
NSString *latStringLocal = [NSString stringWithFormat:NSLocalizedString(@"%c",nil), latString];

在第一行:哪个角色是正确的。纬度> 0度是N,< 0它是一个S.这是有效的。 在第二行我将char转换为字符串。工作正常。 在第三行中,所有这一切都出了问题。运行应用程序时,会显示所有类型的符号和普通字符。每一秒都是新的。 最后一部分是可以理解的,因为locationmanager是不断更新的。

但为什么那些人物呢?我在这里做错了什么?请参阅localizable.strings文件

en.lproj

"N" = "N";
"S" = "S";
"W" = "W"; 
"E" = "E";

nl.proj

"N" = "N";
"S" = "Z";
"W" = "W";
"E" = "O";

app displayname工作正常,因此.strings文件在“read”中找到。 请指教。提前谢谢。

3 个答案:

答案 0 :(得分:0)

我不知道你在用NSLocalizedString()做什么;第一个参数应该是@"N"@"S"而不是@"%c"

答案 1 :(得分:0)

我会这样写:

NSString *latStringLocal = actLat > 0 ? NSLocalizedString(@"N", @"North abbreviation") : NSLocalizedString(@"S", @"South abbreviation"); 

然后重新生成英文字符串:

find . -name \*.m | xargs genstrings

en.lproj / Localizable.strings将包含:

/* North abbreviation */
"N" = "N";

/* South abbreviation */
"S" = "S";

...和nl.lproj / Localizable.strings应包含:

/* North abbreviation */
"N" = "N";

/* South abbreviation */
"S" = "Z";

请注意, genstrings 实用程序不喜欢NSLocalizedString的变量参数(不会为它生成密钥)。但是在运行时 - 如果密钥存在于[NSBundle.mainBundle localizedStringForKey:(key) value:@"" table:nil]中 - 所有都应该有效。

答案 2 :(得分:-1)

NSString *latStringLocal =  NSLocalizedString((actLat > 0) ? @"N" : @"Y", @"");