0
4

2 回答 2

1

这是我的解决方案

- (NSString *)detectLanguage {

    if ([self isEmpty]) {
        return nil;
    }

    NSString *string = nil;

    // You can set a larger detect number here
    if (self.length > 30) {
        string = self;
    } else {
        NSMutableString *tempString = [NSMutableString stringWithString:self];

        while (tempString.length < 30) {
            [tempString appendFormat:@" %@",self];
        }

        string = tempString;
    }

    NSArray *tagschemes = [NSArray arrayWithObjects:NSLinguisticTagSchemeLanguage, nil];
    NSLinguisticTagger *tagger = [[NSLinguisticTagger alloc] initWithTagSchemes:tagschemes options:0];
    [tagger setString:string];
    NSString *language = [tagger tagAtIndex:0 scheme:NSLinguisticTagSchemeLanguage tokenRange:NULL sentenceRange:NULL];

    if (![language isEqualToString:@"und"]) {
        return language;
    }

    return (__bridge NSString *)CFStringTokenizerCopyBestStringLanguage((CFStringRef)string, CFRangeMake(0, MIN(string.length,400)));
}
于 2014-05-10T02:13:59.853 回答
0

您无法以这种方式识别它....至少没有任何不错的准确性。你必须提供一个更长的字符串。

CFStringTokenizerCopyBestStringLanguage 文档说它至少需要 200-400

-> 没有更好的方法,我们也用自己的解决方案进行了尝试,它需要更多的文本来保证准确性

于 2013-01-09T08:34:55.027 回答