Locale.getAvaialableLocales()
为您提供设备中可用的所有语言环境。
但是设备会安装仅支持其中一些可用语言环境的字体
我使用了Resources.getSystem().getAssets().getLocales()
它返回“settings-> Language& Inputs - > Language”选项中提供的列表语言。
但该设备能够支持“设置 - >语言和输入 - >语言”中不存在的更多语言。
例如 在我的Karbon设备Resources.getSystem()。getAssets()。getLocales()返回 只有“印地语”和“旁遮普语”作为支持语言。 但是,当使用“Hike”应用程序选择“泰卢固语”时,此设备可正常工作。
那么我们是否有任何方法可以检查设备是否支持特定语言。
答案 0 :(得分:3)
好问题Siva。
到目前为止,很多人一直在讨论同样的事情而没有回答。
google groups discussion is here
Locale.getAvailableLocales()
都没有
也不是Resources.getSystem().getAssets().getLocales()
为您提供正确的语言环境,您可以依赖它来支持应用程序语言。
原因是,
它们都为您提供该操作系统支持的所有语言环境的列表。操作系统可能支持100多种语言,但设备制造商可能不会将所有这些语言字体(ttf文件)放在/ system / fonts /(或任何系统字体目录)中以保存ROM内存。他们所做的是,因为他们制作区域特定的roms,他们只放置与该特定区域相关的字体(区域设置)。这就是你在美国ROM中找不到印度地区语言的原因。
解决它的最佳方法是, 包含您要支持的任何语言的应用资产中的所有ttf文件, 就像我们支持不同的语言字符串一样。
但要注意字体许可等等。
希望这有帮助。
答案 1 :(得分:2)
我做了以下方式:
这样的调用方法:
isSupported(context,"English") //here "English" is the hardcoded string in specific language like Hindi,Urdu,panjabi .....etc.
如果设备具有绘制特定语言字体的能力,则支持的方法将返回true,否则返回false。
public static boolean isSupported(Context context, String text) {
final int WIDTH_PX = 200;
final int HEIGHT_PX = 80;
int w = WIDTH_PX, h = HEIGHT_PX;
Resources resources = context.getResources();
float scale = resources.getDisplayMetrics().density;
Bitmap.Config conf = Bitmap.Config.ARGB_8888;
Bitmap bitmap = Bitmap.createBitmap(w, h, conf); // this creates a MUTABLE bitmap
Bitmap orig = bitmap.copy(conf, false);
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.rgb(0, 0, 0));
paint.setTextSize((int) (14 * scale));
// draw text to the Canvas center
Rect bounds = new Rect();
paint.getTextBounds(text, 0, text.length(), bounds);
int x = (bitmap.getWidth() - bounds.width()) / 2;
int y = (bitmap.getHeight() + bounds.height()) / 2;
canvas.drawText(text, x, y, paint);
boolean res = !orig.sameAs(bitmap);
orig.recycle();
bitmap.recycle();
return res;
}
希望它会对你有帮助!
答案 2 :(得分:0)
使用此功能检查您的设备是否支持特定的语言环境:
boolean isLocaleAvailable(Locale locale){
Locale defaultLocale = Locale.getDefault();
//update default locale with mLocale
Locale.setDefault(locale);
String str = (String) DateUtils.getRelativeTimeSpanString(
Calendar.getInstance().getTimeInMillis() - 1000,
Calendar.getInstance().getTimeInMillis(), 0);
//revert locale back to default
Locale.setDefault(defaultLocale);
return !str.startsWith("-");
}