我的OSX应用程序无法检测RTL语言

时间:2017-07-12 14:32:55

标签: objective-c macos internationalization

我正在使用极少的UI开发OSX应用程序。对于内化/本地化,我使用第三方库用适当的语言替换我的所有文本(我使用[NSLocale preferredLanguages]检测语言)。问题是我的NSAlert始终以从左到右的方向显示其内容(包括文本,按钮布局......),即使我将系统语言切换为阿拉伯语也是如此。

根据我的研究,似乎NSAlert应该自动正确地切换方向(尽管没有明确说明的地方)。我也检查了这个

NSUserInterfaceLayoutDirection direction = [NSApplication sharedApplication].userInterfaceLayoutDirection;

direction总是(即使在系统语言被设置为阿拉伯语的情况下),等于 NSUserInterfaceLayoutDirection::NSUserInterfaceLayoutDirectionLeftToRight。我怀疑这是问题,但不太清楚如何解决这个问题。

任何人都知道如何:

  • 确保NSApplication知道正确的布局方向吗?

  • 确保NSAlert显示方向正确(特别是RLF语言)?

注意:

https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPInternational/Introduction/Introduction.html#//apple_ref/doc/uid/10000171i-CH1-SW1

它仍然无济于事,因为为了添加对语言的支持,看起来本指南要求我有xib或storyboard文件。我的项目碰巧没有其中任何一个。

提前谢谢大家。

1 个答案:

答案 0 :(得分:2)

要支持阿拉伯语,应用程序内的Resources文件夹中的空ar-001.lproj文件夹将会执行此操作。

如果您不想为每种语言添加文件夹,可以通过调用

强制从右向左书写方向
[[NSUserDefaults standardUserDefaults] setObject:@"YES" forKey:@"AppleTextDirection"];
[[NSUserDefaults standardUserDefaults] setObject:@"YES" forKey:@"NSForceRightToLeftWritingDirection"];

并切换回从左到右

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"AppleTextDirection"];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSForceRightToLeftWritingDirection"];