有时我们需要判断一段文字是属于那种语言:英文?韩文?还是中文?虽说这也算某种程度的猜测,但至少比你自己瞎猜要准确地多! ;)
这里提供三种方法.
首先如果你只在MacOS上运行的话,你可以用AppKit中的NsspellChecker类:
import AppKitlet checker = NsspellChecker.shared()checker.automaticallyIDentifIEsLanguages = truelet str = "猫猪侯佩,弄啥呢!!!"checker.requestChecking(of: str,range: NSRange(location: 0,length: str.characters.count),types: NSTextCheckingResult.CheckingType.orthography.rawValue,options: nil,inSpelldocumentWithTag: 0){num,results,orthography,count in print("\(orthography.dominantLanguage)")}
最终打印的是:zh-Hans
如果你要在iOS上实现这个功能,那么在UIKit中也有一个对应的类UITextChecker,不过遗憾的是该类貌似只能事先指定语言,而不可以侦测语言.而且该类的强项是对单词做拼写检查,你可以列出其所有支持的语言:
UITextChecker.availableLanguages
返回结果是:
["en_US","en_CA","pt_BR","it_IT","ko_KR","nb_NO","de_DE","en_GB","sv_SE","en_AU","en_SG","es_MX","pt_PT","en_IN","fr_FR","es_ES","nl_NL","tr_TR","fi_FI","pl_PL","ru_RU","da_DK"]
So,如果你的目标是iOS,那么你可以使用下面两种方法.
第一种是比较底层的方法,但代码比较简洁,大多数代码用在底层类到高层类的转换上:
func testLangWith(string:String)->String?{ if string.characters.count < 100{ return CFStringTokenizercopyBestStringLanguage(string as CFString!,CFRange(location: 0,length: string.characters.count)) as String? }else{ return CFStringTokenizercopyBestStringLanguage(string as CFString!,length: 100)) as String? }}
第二种是使用NSlinguisticTagger这个类,代码如下:
func testLangWith(string:String)->String?{ let Tagschemes = [NSlinguisticTagschemeLanguage] let tagger = NSlinguisticTagger(Tagschemes: Tagschemes,options: 0) tagger.string = string let lang = tagger.tag(at: 0,scheme: NSlinguisticTagschemeLanguage,tokenRange: nil,sentenceRange: nil) return lang}
下面测试一段韩文:
let str = "외모만을 따지지 마세요. 그것은 당신을 현혹시킬 수 있습니다. 재산에 연연하지 마세요. 그것들은 사라지기 마련입니다. 당신에게 미소를 짓게 할수 있는 사람을 선택하세요. 미소만이 우울한 날을 밝은 날처럼 만들 수 있습니다."let lang = testLangWith(string: str)
最终lang值为:”ko”
PS:上面那一段韩文的意思是:
不要只看外貌,它会迷惑你。不要贪恋财产,它们终究是会消失的。请选择能够对你微笑的人吧,微笑能使忧郁的日子变得明朗。
:)
总结以上是内存溢出为你收集整理的Swift如何判断字符串的语言全部内容,希望文章能够帮你解决Swift如何判断字符串的语言所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)