gpt4 book ai didi

xcode - TIS 服务 : selecting Czech

转载 作者:行者123 更新时间:2023-12-03 17:11:03 26 4
gpt4 key购买 nike

在关注 NSTextField 后,我尝试更改系统输入语言。我的系统中有 3 种输入语言:英语、俄语和捷克语 (QWERTY)。

我使用这个方法:

TISInputSourceRef ref = TISCopyInputSourceForLanguage(CFSTR("cs"));
TISSelectInputSource(ref);

它适用于俄语,但不适用于捷克语...捷克语语言标签是 cs,俄语 - ru。两小时前我做出了输出

NSLog("%@", ref);    

打印一些有关捷克语的内容,但现在它只打印(null)。我想完全使用 QWERTY,而不是 QWERTZ,但我真的无法在任何地方找到代表捷克语 QWERTY 布局的标签。苹果文档说:

If more than one such input source exists and at least one has been used, the most recently used input source is chosen.

但它总是选择英语,而不是捷克语!在控制台中,正如我之前所说,它打印 (null)...那么我必须使用什么来选择捷克语?我为此浪费了大约 3 个小时...请帮忙。

最佳答案

我可以确认 TISCopyInputSourceForLanguage() 的行为不符合预期。您应该向 Apple 提交错误报告。

有一些解决方法,但首先:您是否尝试过设置文本字段单元格的 allowedInputSourceLocales 属性?由于指定了语言环境,我不确定它是否会将输入限制为捷克语、选择捷克语输入源,还是特别选择捷克语 QWERTY 输入源,但值得一试。

如果这没有帮助,那么我会在 TISCopyInputSourceForLanguage() 失败时编写后备代码。复制所有已启用的键盘布局输入源的列表,并在其中搜索支持捷克语作为语言的输入源。

TISInputSourceRef ref = TISCopyInputSourceForLanguage(CFSTR("cs"));

if (!ref)
{
NSDictionary* properties = @{ (__bridge NSString*)kTISPropertyInputSourceCategory: (__bridge NSString*)kTISCategoryKeyboardInputSource,
(__bridge NSString*)kTISPropertyInputSourceType: (__bridge NSString*)kTISTypeKeyboardLayout,
(__bridge NSString*)kTISPropertyInputSourceIsSelectCapable: @YES,
};
NSArray* sources = CFBridgingRelease(TISCreateInputSourceList((__bridge CFDictionaryRef)properties, NO));
for (id sourceObj in sources)
{
TISInputSourceRef source = (__bridge TISInputSourceRef)sourceObj;
NSArray* langs = (__bridge NSArray*)TISGetInputSourceProperty(source, kTISPropertyInputSourceLanguages);
if ([langs containsObject:@"cs"])
{
ref = source;
break;
}
}
}

TISSelectInputSource(ref);

您可以通过查找语言数组中“cs”最早出现的源来扩展此功能(如果多个源支持它)。

即使这样也不能保证您会获得捷克语输入源的 QWERTY 变体。如果您真的想要那个,具体来说,您应该使用它的输入源 ID,即“com.apple.keylayout.Czech-QWERTY”。

要找到那个,您可以使用:

NSDictionary* properties = @{ (__bridge NSString*)kTISPropertyInputSourceID: @"com.apple.keylayout.Czech-QWERTY" };
NSArray* sources = CFBridgingRelease(TISCreateInputSourceList((__bridge CFDictionaryRef)properties, NO));
TISInputSourceRef source = (__bridge TISInputSourceRef)sources.firstObject;

但是,您应该做好准备,该输入源将无法启用,甚至可能无法安装。 (Apple 可能会更改其 Czech-QWERTY 布局以使用不同的标识符或其他内容。)如果已安装但未启用,您可以通过在上述代码后添加如下代码来找到它:

if (!source)
{
properties = @{ (__bridge NSString*)kTISPropertyInputSourceID: @"com.apple.keylayout.Czech-QWERTY",
(__bridge NSString*)kTISPropertyInputSourceIsEnableCapable: @YES };
sources = CFBridgingRelease(TISCreateInputSourceList((__bridge CFDictionaryRef)properties, YES));
source = (__bridge TISInputSourceRef)sources.firstObject;

if (source && TISEnableInputSource(source) != noErr)
source = NULL;
}

请注意,未经用户许可启用输入源是对用户不利的。

关于xcode - TIS 服务 : selecting Czech,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28184241/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com