在iOS上没有复数单词的字典

时间:2013-06-13 12:29:45

标签: ios dictionary words plural

我正在为iOS创建一款文字游戏。我想阻止玩家制作复数词。有没有我可以用来编写像

这样的函数的字典
isPluralWord(@"tables")

将返回true和

isPluralWord(@"table")

将返回false。

谢谢!

3 个答案:

答案 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);
    }
}];