The goog.i18n.bidi Namespace

The goog.i18n.bidi.Dir Enum

Directionality enum. … more

.FORCE_RTL

The goog.i18n.bidi.Format Enum

Unicode formatting characters and directionality string constants. … more

.I18N_LEFT {string}

'right' if locale is RTL, 'left' if not.

.I18N_RIGHT {string}

'left' if locale is RTL, 'right' if not.

.IS_RTL {boolean}

Constant that defines whether or not the current locale is a RTL locale. If {@link goog.i18n.bidi.FORCE_RTL} is not true, this constant will default to check that {@link goog.LOCALE} is one of a few major RTL locales.

This is designed to be a maximally efficient compile-time constant. For example, for the default goog.LOCALE, compiling "if (goog.i18n.bidi.IS_RTL) alert('rtl') else {}" should produce no code. It is this design consideration that limits the implementation to only supporting a few major RTL locales, as opposed to the broader repertoire of something like goog.i18n.bidi.isRtlLanguage.

Since this constant refers to the directionality of the locale, it is up to the caller to determine if this constant should also be used for the direction of the UI. {@see goog.LOCALE}

.LEFT {string}

'left' string constant.

'right' string constant.

.detectRtlDirectionality(str, opt_isHtml)

Check the directionality of a piece of text, return true if the piece of text should be laid out in RTL direction.

str {string}
The piece of text that need to be detected.
opt_isHtml {boolean=}
Whether str is HTML / HTML-escaped. Default: false.
returns {boolean}
Whether this piece of text should be laid out in RTL.

.endsWithLtr(str, opt_isHtml)

Check if the exit directionality a piece of text is LTR, i.e. if the last strongly-directional character in the string is LTR.

str {string}
String being checked.
opt_isHtml {boolean=}
Whether str is HTML / HTML-escaped. Default: false.
returns {boolean}
Whether LTR exit directionality was detected.

.endsWithRtl(str, opt_isHtml)

Check if the exit directionality a piece of text is RTL, i.e. if the last strongly-directional character in the string is RTL.

str {string}
String being checked.
opt_isHtml {boolean=}
Whether str is HTML / HTML-escaped. Default: false.
returns {boolean}
Whether RTL exit directionality was detected.

.enforceLtrInHtml(html)

Enforce the html snippet in RTL directionality regardless overall context. If the html piece was enclosed by tag, dir will be applied to existing tag, otherwise a span tag will be added as wrapper. For this reason, if html snippet start with with tag, this tag must enclose the whole piece. If the tag already has a dir specified, this new one will override existing one in behavior (tested on FF and IE).

html {string}
The string that need to be processed.
returns {string}
The processed string, with directionality enforced to RTL.

.enforceLtrInText(text)

Enforce LTR on both end of the given text piece using unicode BiDi formatting characters LRE and PDF.

text {string}
The piece of text that need to be wrapped.
returns {string}
The wrapped string after process.

.enforceRtlInHtml(html)

Enforce the html snippet in RTL directionality regardless overall context. If the html piece was enclosed by tag, dir will be applied to existing tag, otherwise a span tag will be added as wrapper. For this reason, if html snippet start with with tag, this tag must enclose the whole piece. If the tag already has a dir specified, this new one will override existing one in behavior (tested on FF and IE).

html {string}
The string that need to be processed.
returns {string}
The processed string, with directionality enforced to RTL.

.enforceRtlInText(text)

Enforce RTL on both end of the given text piece using unicode BiDi formatting characters RLE and PDF.

text {string}
The piece of text that need to be wrapped.
returns {string}
The wrapped string after process.

.estimateDirection(str, opt_isHtml)

Estimates the directionality of a string based on relative word counts. If the number of RTL words is above a certain percentage of the total number of strongly directional words, returns RTL. Otherwise, if any words are strongly or weakly LTR, returns LTR. Otherwise, returns UNKNOWN, which is used to mean "neutral". Numbers are counted as weakly LTR.

str {string}
The string to be checked.
opt_isHtml {boolean=}
Whether str is HTML / HTML-escaped. Default: false.
returns {goog.i18n.bidi.Dir}
Estimated overall directionality of {@code str}.

.guardBracketInHtml(s, opt_isRtlContext)

Apply bracket guard using html span tag. This is to address the problem of messy bracket display frequently happens in RTL layout.

s {string}
The string that need to be processed.
opt_isRtlContext {boolean=}
specifies default direction (usually direction of the UI).
returns {string}
The processed string, with all bracket guarded.

.guardBracketInText(s, opt_isRtlContext)

Apply bracket guard using LRM and RLM. This is to address the problem of messy bracket display frequently happens in RTL layout. This version works for both plain text and html. But it does not work as good as guardBracketInHtml in some cases.

s {string}
The string that need to be processed.
opt_isRtlContext {boolean=}
specifies default direction (usually direction of the UI).
returns {string}
The processed string, with all bracket guarded.

.hasAnyLtr(str, opt_isHtml)

Test whether the given string has any LTR characters in it.

str {string}
The given string that need to be tested.
opt_isHtml {boolean=}
Whether str is HTML / HTML-escaped. Default: false.
returns {boolean}
Whether the string contains LTR characters.

.hasAnyRtl(str, opt_isHtml)

Test whether the given string has any RTL characters in it.

str {string}
The given string that need to be tested.
opt_isHtml {boolean=}
Whether str is HTML / HTML-escaped. Default: false.
returns {boolean}
Whether the string contains RTL characters.

.isLtrChar(str)

Check if the first character in the string is LTR or not.

str {string}
The given string that need to be tested.
returns {boolean}
Whether the first character in str is an LTR char.

.isNeutralChar(str)

Check if the first character in the string is neutral or not.

str {string}
The given string that need to be tested.
returns {boolean}
Whether the first character in str is a neutral char.

.isNeutralText(str, opt_isHtml)

Check whether the input string either contains no strongly directional characters or looks like a url.

str {string}
String being checked.
opt_isHtml {boolean=}
Whether str is HTML / HTML-escaped. Default: false.
returns {boolean}
Whether neutral directionality is detected.

.isRtlChar(str)

Check if the first character in the string is RTL or not.

str {string}
The given string that need to be tested.
returns {boolean}
Whether the first character in str is an RTL char.

.isRtlLanguage(lang)

Check if a BCP 47 / III language code indicates an RTL language, i.e. either: - a language code explicitly specifying one of the right-to-left scripts, e.g. "az-Arab", or

- a language code specifying one of the languages normally written in a right-to-left script, e.g. "fa" (Farsi), except ones explicitly specifying Latin or Cyrillic script (which are the usual LTR alternatives).

The list of right-to-left scripts appears in the 100-199 range in http://www.unicode.org/iso15924/iso15924-num.html, of which Arabic and Hebrew are by far the most widely used. We also recognize Thaana, N'Ko, and Tifinagh, which also have significant modern usage. The rest (Syriac, Samaritan, Mandaic, etc.) seem to have extremely limited or no modern usage and are not recognized to save on code size. The languages usually written in a right-to-left script are taken as those with Suppress-Script: Hebr|Arab|Thaa|Nkoo|Tfng in http://www.iana.org/assignments/language-subtag-registry, as well as Sindhi (sd) and Uyghur (ug). Other subtags of the language code, e.g. regions like EG (Egypt), are ignored.

lang {string}
BCP 47 (a.k.a III) language code.
returns {boolean}
Whether the language code is an RTL language.

.mirrorCSS(cssStr)

Swap location parameters and 'left'/'right' in CSS specification. The processed string will be suited for RTL layout. Though this function can cover most cases, there are always exceptions. It is suggested to put those exceptions in separate group of CSS string.

cssStr {string}
CSS spefication string.
returns {string}
Processed CSS specification string.

.normalizeHebrewQuote(str)

Replace the double and single quote directly after a Hebrew character with GERESH and GERSHAYIM. In such case, most likely that's user intention.

str {string}
String that need to be processed.
returns {string}
Processed string with double/single quote replaced.

.setElementDirAndAlign(element, dir)

Sets text input element's directionality and text alignment based on a given directionality.

element {Element}
Input field element to set directionality to.
dir {goog.i18n.bidi.Dir|number|boolean}
Desired directionality, given in one of the following formats: 1. A goog.i18n.bidi.Dir constant. 2. A number (positive = LRT, negative = RTL, 0 = unknown). 3. A boolean (true = RTL, false = LTR).

.startsWithLtr(str, opt_isHtml)

Check whether the first strongly directional character (if any) is LTR.

str {string}
String being checked.
opt_isHtml {boolean=}
Whether str is HTML / HTML-escaped. Default: false.
returns {boolean}
Whether LTR directionality is detected using the first strongly-directional character method.

.startsWithRtl(str, opt_isHtml)

Check whether the first strongly directional character (if any) is RTL.

str {string}
String being checked.
opt_isHtml {boolean=}
Whether str is HTML / HTML-escaped. Default: false.
returns {boolean}
Whether RTL directionality is detected using the first strongly-directional character method.

.toDir(givenDir)

Convert a directionality given in various formats to a goog.i18n.bidi.Dir constant. Useful for interaction with different standards of directionality representation.

givenDir {goog.i18n.bidi.Dir|number|boolean}
Directionality given in one of the following formats: 1. A goog.i18n.bidi.Dir constant. 2. A number (positive = LRT, negative = RTL, 0 = unknown). 3. A boolean (true = RTL, false = LTR).
returns {goog.i18n.bidi.Dir}
A goog.i18n.bidi.Dir constant matching the given directionality.