3

我正在构建一个应用程序,它允许用户查看世界各地的当地时间。正在使用 Google API 获取信息并且一切正常,但为了获得最佳结果,我需要指定我想使用的语言。

显然,就我而言,将所需语言设置为用户在输入城市名称时使用的语言是有意义的。在 iPhone 上,这非常容易做到,但我不知道如何在 macOS 上获得这种语言代码。有人可以帮我吗?

更新

根据 Leo 的建议,我现在正处于借助碳框架获得当前输入的阶段。

let source = TISCopyCurrentKeyboardInputSource().takeUnretainedValue()
let lang = TISGetInputSourceProperty(source, kTISPropertyInputSourceLanguages).assumingMemoryBound(to: NSArray.self).pointee

问题是TISGetInputSourceProperty()返回一个UnsafeMutableRawPointer. 而且我找不到将其转换为可读内容的方法。我认为它是一个NSArray,但我没有运气尝试转换它。有人可以帮忙吗?

4

2 回答 2

1
let source = TISCopyCurrentKeyboardInputSource().takeUnretainedValue()
let value = TISGetInputSourceProperty(source, kTISPropertyInputSourceLanguages)
if (value != nil) {
    var name = Unmanaged<AnyObject>.fromOpaque(value!).takeUnretainedValue() as? String
}

我在这里学习它https://github.com/noraesae/kawa/blob/master/kawa/InputSourceManager.swift

于 2017-04-29T14:23:40.730 回答
0

CarbonTISCopyCurrentKeyboardInputSource()提供了当前的语言。

TISInputSourceRef 源 = TISCopyCurrentKeyboardInputSource(); TISGetInputSourceProperty(source, kTISPropertyInputSourceLanguages));

还有kTISNotifySelectedKeyboardInputSourceChanged用于确定语言何时更改的分布式通知。

为了 Swift 的易用性,考虑制作一个 Objective C 包装器,它返回上述 API 的字符串值。

于 2016-11-26T17:39:28.917 回答