如何在用作NSLocalizedString的键的printf格式的NSString中保留标志/宽度?

时间:2010-12-21 02:44:48

标签: cocoa cappuccino localizable.strings

我使用genstrings从我的项目中的源代码文件生成.strings个文件。虽然该项目在技术上是一个Cappuccino应用程序,但此问题应同样适用于使用.strings文件的任何项目。

我有一个我希望本地化的格式字符串:@"%d:%02d %@"。它用于显示时间值。如果这是一个OSX / iOS应用程序,我会使用内置的日期时间格式,但因为它是Cappuccino我必须自己动手。当我运行genstrings时,它会为该密钥生成此值:"%1$d:%2$d %3$@"

这与Localizable.strings文件中显示的内容相同:

/* ShortLocalTimeFormat */
"%d:%02d %@" = "%1$d:%2$d %3$@";

运行此命令:genstrings -o Resources/en.lproj -s CPLocalizedString *.j */*.j

同样,请忽略我使用CPLocalizedString代替NSLocalizedStrings*.j而不是*.m,因为这些值适合卡布奇诺。请注意,02中的%02d将在生成的格式字符串中被丢弃。如果我使用-noPositionalParameters选项再次运行它,它只会保留字符串:genstrings -o Resources/en.lproj -noPositionalParameters -s CPLocalizedString *.j */*.j

/* ShortLocalTimeFormat */
"%d:%02d %@" = "%d:%02d %@";

这是genstrings中的错误,还是在保持位置参数的同时不能在格式字符串中使用flags / width?

2 个答案:

答案 0 :(得分:0)

如果这是一个Objective-C项目,我会将格式字符串缩短为"%1$@ %2$@"并使用NSDateFormatter生成时间字符串。如果该类不可用,我将自己生成中间时间字符串,并使用该字符串作为本地化格式字符串的参数,而不是直接将小时/分钟传递给本地化格式字符串。

答案 1 :(得分:0)

我也注意到了这个错误;这不仅仅是你。但是,它似乎仅适用于%d说明符 - 我正在使用%02d并且它变为%1$d,但%.02f变为%1$.02f

我已提交a bug