BidiFormatter
public final class BidiFormatter
extends Object
实用程序类用于格式化文本,以便在潜在的反方向性上下文中显示,而不会造成混淆。 上下文的方向性是在格式化器创建时设置的,文本的方向性可以在知道时估计或传递。 提供以下功能:
1.双向打包当一种语言的文本以另一种相反方向的语言混合到文档中时,例如,在希伯来语网页中嵌入英文公司名称时,插入的字符串及其周围的文本可能会显示不正确,除非插入的字符串显式地与“包装器”中的周围文本分开:
- 声明其方向性,以便字符串正确显示。 这可以通过Unicode双向格式化代码unicodeWrap(String)
和类似的方法完成。
- 隔离字符串的方向性,因此不会不当地影响周围的内容。 目前,只能使用与上下文(LRM或RLM)相同方向的不可见的Unicode字符,除了上面的方向性声明外,还可以将方向性重置为上下文的方向性。 “重置”可能需要在字符串的两端完成。 没有字符串后的“重置”,字符串将“粘”到一个数字或逻辑上分离的反向文本,而这些文本恰好在内联(即使用空格和标点符号等中性内容分隔)。 没有字符串之前的“重置”,同样的事情可能会发生,但只有更多的反向文本,而不是数字。 一种方法是仅在每个字符串之后“重置”方向,理论上如果前面的相反方向文本本身是双向包装的,则在它将防止粘连之后的“重置”。 (仅在每个字符串确实无法工作之前执行“重置”,因为我们不想要求双向打包数字,而双向打包的反向字符串可以后跟一个数字。)但最安全的策略是请在每个字符串的两端执行“重置”,因为RTL邮件翻译通常包含未翻译的拉丁字母品牌名称和技术术语,其中一个可以后跟一个双向包装插入值。 另一方面,当有消息时,最好在消息翻译本身中手动执行“重置”,因为消息的反方向文本后面可以跟随一个插入的数字,我们不会双向打包无论如何。 因此,仅在字符串是当前默认值之后“重置”。 除了“重置”之外,最近增加的HTML,CSS和Unicode标准允许隔离成为方向性声明的一部分。 这种隔离形式比“重置”更好,因为它占用更少的空间,不需要知道上下文方向性,具有比“重置”更温和的效果,并且可以保护字符串的两端。 但是,我们尚未允许使用它,因为所需的平台尚不支持它。
提供这些包装服务是比迪格式化程序的基本目的。
2.方向性估计如何知道一个要插入周围文本的字符串是否具有相同的方向性? 那么,在很多情况下,人们知道在编写插入代码时必定会出现这种情况,例如,将本地化消息插入本地化页面时。 在这种情况下,完全不需要使用双向格式化器。 在其他一些情况下,它不需要与上下文相同,但要么是常量(例如,URL总是LTR),要么是已知的。 在其余的情况下,例如,当字符串是用户输入的或来自数据库的时候,字符串的语言(以及它的方向性)不是先验已知的,必须在运行时估计。 双向格式化程序可以使用默认的第一强估计算法自动执行此操作。 它也可以配置为使用自定义方向性估计对象。
Summary
Public methods |
static BidiFormatter |
getInstance() 用于创建默认区域设置方向性的BidiFormatter实例的工厂。 |
static BidiFormatter |
getInstance(boolean rtlContext) 根据上下文方向性创建BidiFormatter实例的工厂。 |
static BidiFormatter |
getInstance(Locale locale) 根据上下文语言环境创建BidiFormatter实例的工厂。 |
boolean |
getStereoReset() |
boolean |
isRtl(String str) 使用默认文本方向启发式估计字符串的方向性。 |
boolean |
isRtlContext() |
String |
unicodeWrap(String str, TextDirectionHeuristicCompat heuristic, boolean isolate) 为上下文方向性的纯文本输出格式化一个给定方向性的字符串,因此反向方向性字符串既不会出现乱码,也不会造成周围环境的干扰。 |
String |
unicodeWrap(String str, TextDirectionHeuristicCompat heuristic) 像 unicodeWrap(String, android.support.v4.text.TextDirectionHeuristicCompat, boolean) 一样 unicodeWrap(String, android.support.v4.text.TextDirectionHeuristicCompat, boolean) ,但假设 isolate 为真。 |
String |
unicodeWrap(String str, boolean isolate) 像 unicodeWrap(String, android.support.v4.text.TextDirectionHeuristicCompat, boolean) 一样 unicodeWrap(String, android.support.v4.text.TextDirectionHeuristicCompat, boolean) ,但使用格式化程序的默认方向估计算法。 |
String |
unicodeWrap(String str) 像 unicodeWrap(String, android.support.v4.text.TextDirectionHeuristicCompat, boolean) 一样 unicodeWrap(String, android.support.v4.text.TextDirectionHeuristicCompat, boolean) ,但使用格式化程序的默认方向估计算法并假定 isolate 为真。 |
Public methods
getInstance
BidiFormatter getInstance ()
用于创建默认区域设置方向性的BidiFormatter实例的工厂。
getInstance
BidiFormatter getInstance (boolean rtlContext)
根据上下文方向性创建BidiFormatter实例的工厂。
Parameters |
rtlContext |
boolean : Whether the context directionality is RTL. |
getInstance
BidiFormatter getInstance (Locale locale)
根据上下文语言环境创建BidiFormatter实例的工厂。
Parameters |
locale |
Locale : The context locale. |
getStereoReset
boolean getStereoReset ()
Returns |
boolean |
Whether directionality "reset" should also be done before a string being bidi-wrapped, not just after it. |
isRtl
boolean isRtl (String str)
使用默认文本方向启发式估计字符串的方向性。
Parameters |
str |
String : String whose directionality is to be estimated. |
Returns |
boolean |
true if str 's estimated overall directionality is RTL. Otherwise returns false. |
isRtlContext
boolean isRtlContext ()
Returns |
boolean |
Whether the context directionality is RTL |
unicodeWrap
String unicodeWrap (String str,
TextDirectionHeuristicCompat heuristic,
boolean isolate)
为上下文方向性的纯文本输出格式化一个给定方向性的字符串,因此反向方向性字符串既不会出现乱码,也不会造成周围环境的干扰。 这使用Unicode双向格式化字符。
算法:如果给定的方向性与上下文方向性不匹配,请使用Unicode双向格式化字符包装字符串:RLE + str
+ PDF for RTL文本,或者LRE + str
+ PDF用于LTR文本。
如果是isolate
,则定向隔离绳子,使其不会isolate
周围环境。 目前,这是通过在字符串的整体方向性或退出方向性与上下文的方向性相反时附加与上下文方向性(LRM或RLM)匹配的尾随Unicode双向标记来“重置”字符串之后的方向性来完成的。 除非格式化程序是使用stereoReset(boolean)
参数使用stereoReset(boolean)
构建的,否则当字符串的总体方向性或入口方向性与上下文的方向性相反时,还会false
匹配与上下文方向性匹配的Unicode双向标记。 请注意,与整体方向性相反,入口和出口方向性取决于字符串本身。
*不*做HTML转义。
Parameters |
str |
String : The input string. |
heuristic |
TextDirectionHeuristicCompat : The algorithm to be used to estimate the string's overall direction. |
isolate |
boolean : Whether to directionally isolate the string to prevent it from garbling the content around it |
Returns |
String |
Input string after applying the above processing. null if str is null . |