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

4
我正在尝试加载以下印度语言的strings.xml文件:
  1. Oriya(values-or)
  2. Bengali(values-bn)
  3. Punjabi(values-pa)
  4. Gujarati(values-gu)
  5. Marathi(values-mr)
  6. Malayalam(values-ml)
  7. Telugu(values-te)
  8. Tamil(values-ta)
  9. Kannada(values-kn)
我还尝试了使用“values-or-rIN”等方式,并使用以下代码加载区域设置:
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字体?

只需创建名为"values-gu"的文件夹,然后在代码中使用"gu"表示古吉拉特语。 - Divyesh Patel
我提到过我已经做了那个,但是只得到了英文文本。只能用于印地语和英语。 - NSC
2个回答

3
像这样为古吉拉特语:
        Locale myLocale = new Locale("gu");
        Resources res =  getResources();
        DisplayMetrics dm = res.getDisplayMetrics();
        Configuration conf = res.getConfiguration();
        conf.locale = myLocale;
        res.updateConfiguration(conf, dm);

将“gu”替换为其他语言名称 我在我的应用程序中使用古吉拉特语。这个很完美。


太好了,它运行得很好。但是有一个问题,我无法理解,我们的代码几乎相同,只是我从getBaseContext().getResource()调用getResource(),除此之外我做的一切都一样。 - NSC
我认为getBaseContext在整个应用程序中不起作用,尝试使用getApplicationContext。 - Divyesh Patel
1
对我不起作用,我正在使用带有KitKat的Eureka设备。 - Sagar

2
我已经采用以下方法进行了操作:
    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);

文件夹名称应为:

values-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;
    }  

希望您能受益!

你所传递的 isSupported() 方法中的 text 是什么意思? - Sagar
我正在使用文件夹名称作为 values-gu,但对我不起作用。我在使用带有 kitkatEureka 设备。 - Sagar
@Sagar 很抱歉回复晚了。这里的“text”指特定语言中的字符串,例如:要检查是否支持“印地语”,应该这样调用 isSupported(context, "हिंदी")。 - Vikas Tiwari
@Sagar,你找到支持Kitkat语言的解决方案了吗? - Srinivasan
@Srinivasan 我们的目标设备是Android 4.4以上版本,只显示支持的语言。 - Sagar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接