我在兩個UILabels中顯示用戶註釋 - 一個用於用戶名,一個用於消息。兩個標籤都具有相同的X,Y座標,但是消息標籤前面的空格等於用戶名的寬度。這項技術可以幫助我輕鬆支持多行消息。如何檢測UILabel在Cocoa Touch中是否包含從右到左的語言?
用戶編寫阿拉伯語信息時出現問題。阿拉伯語是一種左派語言的權利。這意味着,我必須添加空格到端的阿拉伯字符串,而不是開始。正如你在下面的屏幕截圖中看到的,我沒有做出這種區分,並且阿拉伯消息被輸入了用戶名。那麼如何檢測UILabel的文本屬性(NSString)是以從右到左的語言編寫的?
失敗的嘗試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
該API需要你的語言代碼通過。我不知道如何檢測字符串的語言。 – JoJo
我添加了一段代碼,可以讓你確定用戶的語言偏好。 – dman
這告訴我評論者的首選語言,而不是評論的作者。我需要後者,因爲評論的作者用不同的語言編寫。 – JoJo