2010-11-16 6 views
11

Je dois être en mesure de détecter si la langue que mon utilisateur consulte est une langue RTL (Right To Left) comme l'arabe.Existe-t-il un moyen de détecter un langage RTL dans Java?

Pour le moment, je ne fais que détecter cela en fonction du code de langue de la propriété système user.language, mais il doit y avoir un meilleur moyen.

Répondre

12
ComponentOrientation.getOrientation(new Locale(System.getProperty("user.language"))).isLeftToRight(); 
4

Je me sentais un peu sale se fondant sur les classes AWT qui sont tout à fait daté et je traitais des codes linguistiques BCP-47, donc j'ai fini de copier ce code de Google Closure modèles:

/** 
* A regular expression for matching right-to-left language codes. 
* See {@link #isRtlLanguage} for the design. 
*/ 
private static final Pattern RtlLocalesRe = Pattern.compile(
    "^(ar|dv|he|iw|fa|nqo|ps|sd|ug|ur|yi|.*[-_](Arab|Hebr|Thaa|Nkoo|Tfng))" + 
    "(?!.*[-_](Latn|Cyrl)($|-|_))($|-|_)"); 
/** 
* 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<p> 
* - 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).<p> 
* 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. 
* 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). 
* The presence of other subtags of the language code, e.g. regions like EG 
* (Egypt), is ignored. 
*/ 
public static boolean isRtlLanguage(String languageString) { 
    return languageString != null && 
     RtlLocalesRe.matcher(languageString).find(); 
} 

Affichez https://closure-templates.googlecode.com/svn-history/r21/trunk/java/src/com/google/template/soy/internal/i18n/BidiUtils.java

+1

Quel est le problème wi Les classes AWT? Ce n'est pas comme s'ils avaient été abandonnés ou quelque chose comme ça. –

+0

Il n'est pas vraiment clair quelles classes AWT continueront à fonctionner dans un environnement sans tête, par exemple. – Trejkaz

Questions connexes