如何在android中为印度语加载string.xml?

时间:2017-03-29 05:50:18

标签: android localization

我正在尝试为以下印度语加载strings.xml文件:

  1. Oriya(values-or)
  2. 孟加拉语(values-bn)
  3. 旁遮普语(values-pa)
  4. 古吉拉特语(价值观)
  5. Marathi(values-mr)
  6. 马拉雅拉姆语(值-ml)
  7. 泰卢固语(values-te)
  8. Tamil(values-ta)
  9. Kannada(values-kn)
  10. 并尝试使用values-or-rIN,..etc。并使用以下代码加载语言环境:

    public void changeLang(String lang) {
            Configuration config = getBaseContext().getResources().getConfiguration();
            if (!"".equals(lang) && !config.locale.getLanguage().equals(lang)) {
    
                SharedPreferences.Editor ed = PreferenceManager.getDefaultSharedPreferences(this).edit();
                ed.putString(getString(R.string.locale_lang), lang);
                ed.commit();
    
                locale = new Locale(lang);
                Locale.setDefault(locale);
                Configuration conf = new Configuration(config);
                conf.locale = locale;
                getBaseContext().getResources().updateConfiguration(conf, getBaseContext().getResources().getDisplayMetrics());
                SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
                SharedPreferences.Editor editor = prefs.edit();
                editor.putString(this.getString(R.string.locale_lang), lang);
                editor.commit();
            }
        }
    

    以上代码适用于所有国际语言。但不适用于上述语言。我看到很多答案,因为我们需要加载相应语言的字体ttf文件。但我不想加载字体(TypeFace)。我想加载strings.xml。

    有人可以建议如何加载印度语的strings.xml吗?可能吗?或者我应该为上述语言使用字体ttf吗?

2 个答案:

答案 0 :(得分:2)

这样的古吉拉特语:

        Locale myLocale = new Locale("gu");
        Resources res =  getResources();
        DisplayMetrics dm = res.getDisplayMetrics();
        Configuration conf = res.getConfiguration();
        conf.locale = myLocale;
        res.updateConfiguration(conf, dm);

改变" gu"与其他语言名称 我在我的应用程序中使用古吉拉特语。这完美地运作

答案 1 :(得分:1)

我按照以下方式完成了这项工作:

    String lang = "ml";//for malyalam language

    if(lang.equalsIgnoreCase(getResources().getString(R.string.text_item_ml))) {
              lang = Constants.LANGUAGE_CODE_MALAYALAM;
              country = Constants.COUNTRY_CODE_INDIA;
         }

    Locale locale;
    if (country == null) {
       locale = new Locale(lang);
      } else {
              locale = new Locale(lang, country);
             }
      Locale.setDefault(locale);
      Configuration config = new Configuration();
      config.locale = locale;
      getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics());
onConfigurationChanged(config);

值文件夹名称应为:

值-ML-RIN

values-gu-rIN

如果您的手机不支持特定字符,那么只需要其他字体不需要自定义字体,我制作的应用程序支持12种印度本地语言,没有任何自定义字体。

使用以下方法

检查您的手机是否支持特定信息
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;
    }  

希望它会对你有帮助!