gpt4 book ai didi

objective-c - 您如何检测 UILabel 在 Cocoa Touch 中包含从右到左的语言?

转载 作者:行者123 更新时间:2023-12-02 06:39:31 25 4
gpt4 key购买 nike

我在两个 UILabels 中显示用户评论- 一个用于用户名,一个用于消息。两个标签具有相同的 X、Y 坐标,但消息标签前面加上与用户名宽度相等的空格。这种技术帮助我轻松支持多行消息。

用户编写阿拉伯语消息时出现问题。阿拉伯语是一种从右到左的语言。这意味着,我必须将空格添加到阿拉伯字符串的结尾,而不是开头。正如您在下面的屏幕截图中看到的那样,我没有进行区分,阿拉伯语消息进入了用户名。那么我如何检测 UILabel 的文本属性 ( NSString ) 是用从右到左的语言编写的呢?

arabic

失败尝试 1:正则表达式

我试过使用 regexes , 但以下函数始终为每个字符串(包括阿拉伯语)返回 false。

@implementation UILabel (position)

- (BOOL) containsArabic
{
NSError* error;
NSRegularExpression* regex = [NSRegularExpression
regularExpressionWithPattern:@"\p{Arabic}"
options:0
error:&error
];
return error == nil
&& [regex
numberOfMatchesInString:self.text
options:0
range:NSMakeRange(0, self.text.length)] > 0;
}

@end

失败尝试 2:NSLocale

- (BOOL) containsArabic
{
NSString *isoLangCode = (NSString*)CFStringTokenizerCopyBestStringLanguage(
(CFStringRef)self.text,
CFRangeMake(
0,
self.text.length
)
);
NSLocaleLanguageDirection direction = [NSLocale lineDirectionForLanguage:isoLangCode];
NSLog(@"++++++");
NSLog(@"%@", self.text);
NSLog(@"%d", direction);
return direction == NSLocaleLanguageDirectionRightToLeft;
}

输出无用:

2012-05-28 10:59:11.454 [2110:707] MANCHESTER CITY VS MANCHESTER UNITED LIVE HD
2012-05-28 10:59:11.461 [2110:707] 0
2012-05-28 10:59:11.474 [2110:707] ++++++
2012-05-28 10:59:11.477 [2110:707] tak
2012-05-28 10:59:11.484 [2110:707] 0
2012-05-28 10:59:11.511 [2110:707] ++++++
2012-05-28 10:59:11.513 [2110:707] ونهارك سعيد
2012-05-28 10:59:11.520 [2110:707] 3
2012-05-28 10:59:11.704 [2110:707] ++++++
2012-05-28 10:59:11.712 [2110:707] نهارك سعيد
2012-05-28 10:59:11.740 [2110:707] 3
2012-05-28 10:59:11.763 [2110:707] ++++++
2012-05-28 10:59:11.767 [2110:707] i think i am close
2012-05-28 10:59:11.772 [2110:707] 3

最佳答案

此答案假定您使用的是 ARC:

NSString *stringToTest = @"Some Foreign Language";

NSString *isoLangCode = (__bridge_transfer NSString*)CFStringTokenizerCopyBestStringLanguage((__bridge CFStringRef)stringToTest, CFRangeMake(0, stringToTest.length));

NSLocaleLanguageDirection direction = [NSLocale characterDirectionForLangauge:isoLangCode];

然后您可以使用 NSLocale API 的 lineDirectionForLanguage: 方法来确定语言行方向。

关于objective-c - 您如何检测 UILabel 在 Cocoa Touch 中包含从右到左的语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10779083/

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