我正在为iOS创建一款文字游戏。我想阻止玩家制作复数词。有没有我可以用来编写像
这样的函数的字典isPluralWord(@"tables")
将返回true和
isPluralWord(@"table")
将返回false。
谢谢!
答案 0 :(得分:0)
天真和错误的解决方案:
BOOL isPlural(NSString *s)
{
return [s characterAtIndex:s.length - 1] == 's';
}
正确的解决方案是将其与智能检测不规则单词(例如“公式”和“公式”)以及不是复数但以“s”结尾的单词(例如“括号”和“括弧”)。为此,您可能想要获得某种具有一些语法注释的英语单词数据库。
答案 1 :(得分:0)
不要在字符串末尾检查字符'',而应该使用 Localizable.stringsdict 来表示这样的复数字。在这个plist中,你可以提到用其复数映射的键。
请看下面这样的字符串
的例子<key>%d Likes</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@likes@</string>
<key>likes</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%d Like</string>
<key>other</key>
<string>%d Likes</string>
</dict>
</dict>
在plist中定义上述复数后,可以通过传递带字符串
的整数直接调用它NSInteger x =为一个传递1,为其他
传递任何其他数字NSString *pluralString = [NSString localizedStringWithFormat:NSLocalizedString(@"%d Likes", @"X number of Likes for a post"), x]
In case of X = 1, you will get 1 Like
And, In case of X = any number other than 1, consider 10, answer will be 10 Likes.
您还可以查看链接以获取更多参考:http://macoscope.com/blog/effective-localization-when-working-with-language-plural-rules/
答案 2 :(得分:0)
您可以使用NSLinguisticTagger
:
#import <Foundation/Foundation.h>
NSLinguisticTagger *linguisticTagger = [[NSLinguisticTagger alloc] initWithTagSchemes:@[NSLinguisticTagSchemeLemma] options:kNilOptions];
linguisticTagger.string = @"table tables";
[linguisticTagger enumerateTagsInRange:NSMakeRange(0, linguisticTagger.string.length) scheme:NSLinguisticTagSchemeLemma options:NSLinguisticTaggerOmitWhitespace usingBlock:^(NSString *tag, NSRange tokenRange, NSRange sentenceRange, BOOL *stop) {
NSString *word = [linguisticTagger.string substringWithRange:tokenRange];
if ([word isEqualToString:tag]) {
NSLog(@"word '%@' is singular", word);
} else {
NSLog(@"word '%@' is plural", word);
}
}];