android中的设备支持如何检查特定语言

时间:2016-03-03 04:47:09

标签: android

Locale.getAvaialableLocales()为您提供设备中可用的所有语言环境。 但是设备会安装仅支持其中一些可用语言环境的字体

我使用了Resources.getSystem().getAssets().getLocales() 它返回“settings-> Language& Inputs - > Language”选项中提供的列表语言。

但该设备能够支持“设置 - >语言和输入 - >语言”中不存在的更多语言。

例如 在我的Karbon设备Resources.getSystem()。getAssets()。getLocales()返回 只有“印地语”和“旁遮普语”作为支持语言。 但是,当使用“Hike”应用程序选择“泰卢固语”时,此设备可正常工作。

那么我们是否有任何方法可以检查设备是否支持特定语言。

3 个答案:

答案 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("-");
}