如何在textview中获取文本的语言?

问题描述:

我在我的android消息传递应用程序中有一个textview我得到了我的android手机的消息,并且我在textviews中显示它们如果文本是波斯语,我想将layout_gravity设置为正确,那么如何检测我从下面获得的文本语言uri ?如何在textview中获取文本的语言?

Uri uri = Uri.parse("content://sms/"); 
+0

不明白你的问题 –

+0

@BhavdipPathar有什么问题呢?我的应用程序是一个短信应用程序,我从数据库中获取信息,并显示他们其中的一些是英文和波斯语wriiten,我怎么能检测到的短信是波斯语或不? – Suzi

+1

有第三方选项可用于语言检测。 [检查了这一点(https://www.google.co.in/search?q=language+detection+online+apis&oq=language+detection+online+apis&aqs=chrome..69i57.7601j0j1&sourceid=chrome&es_sm=93&ie=UTF -8#q =语言+检测+谷歌+的API +机器人)。 –

我的解决办法是让用户的首选Locale

Locale.getDefault(); 

OR

Locale.getDefault().getLanguage(); 

,并设置基础上的Locale结果的layout_gravity


Locale例子:

Locale.getDefault().getLanguage()  ---> en  
Locale.getDefault().getISO3Language() ---> eng 
Locale.getDefault().getCountry()  ---> US 
Locale.getDefault().getISO3Country() ---> USA 
Locale.getDefault().getDisplayCountry() ---> United States 
Locale.getDefault().getDisplayName() ---> English (United States) 
Locale.getDefault().toString()   ---> en_US 
Locale.getDefault().getDisplayLanguage()---> English 

Locale

区域设置代表一个语言/国家/变体的组合。语言环境为 ,用于更改信息的显示方式,例如数字或日期 以符合他们描述的区域中的约定。

语言代码是由ISO 639-1定义的两字母小写ISO语言代码(如 作为“en”)。国家代码是由ISO 3166-1定义的双字母 大写的ISO国家代码(如“US”)。 变体代码未指定。

请注意,Java使用了多个弃用的双字母代码。希伯来语 (“he”)语言代码被重写为“iw”,印度尼西亚语(“id”)为“in”, 和意第绪语(“yi”)为“ji”。


UPDATE:
基于@rahul-tiwari评论:

为了获得当前的键盘语言,使用:

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
InputMethodSubtype ims = imm.getCurrentInputMethodSubtype(); 
String locale = ims.getLocale(); 




我没有正确地得到你的问题,谢谢@rahul-tiwari

UPDATEN.º2

Bidi类。如果您的文本是left-to-right,则该类别有getBaseLevel()方法,否则返回0,否则返回1(如果right-to-left)。

例如:

@Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 

     Bidi bidi = new Bidi(userList.get(position).getName(), Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT); 
     if(bidi.getBaseLevel() == 0) 
      convertView = myInflater.inflate(R.layout.list_add_friends_row, null); 
     else 
      convertView = myInflater.inflate(R.layout.list_add_friends_row_mirror, null); 

还有一种方法,那baseIsLeftToRight()可能会更好,如果语句中使用英寸结果与上面相同。

Bidi bidi = new Bidi(userList.get(position).getName(), Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT); 
if(bidi.baseIsLeftToRight()) 
       convertView = myInflater.inflate(R.layout.list_add_friends_row, null); 
      else 
       convertView = myInflater.inflate(R.layout.list_add_friends_row_mirror, null); 

SRC:https://*.com/a/18008575/797495


public final class Bidi 
extends Object 

这个类实现了Unicode双向算法。

甲的双向对象提供的 用于创建的文本双向重排的信息。例如,这是必需的,以正确 显示阿拉伯文或希伯来文文本。这些语言都是混合 方向,因为他们从订单号左到右,而从订货 大多数其他文字从右到左。

创建后,可以查询双向对象以查看它所代表的文本是否全部是从左到右或从右到左。这些对象非常轻便,并且这个文本相对容易处理。

如果有多次文本运行,则有关运行的信息可以是 通过索引访问以获取运行的开始,限制和级别。所述 水平代表的方向和一个 定向运行的“嵌套级别”。奇数级别是从右到左,而偶数级别是从左到右的 。因此,例如,级别0表示左到右文本, 而电平1表示从右到左的文本,和2级表示嵌入在从右至左运行 左到右的文本。

+0

这将提供手机的语言环境,可能是也可能不是短信文本的语言。 –

+0

你说得对,我已经更新了我的答案,谢谢! –

+0

这将提供键盘的语言环境。问题是关于显示用户的短信收件箱中已经存在的短信。 –