Изменить значение R.string программно? - PullRequest
3 голосов
/ 29 марта 2011

Я ищу способ динамического изменения значения строкового ресурса. Я пытался использовать отражение, но он утверждает, что «недопустимое значение для поля».

Я использую строки для значений в макете, но нужно поменять их местами для разных языков.

Пожалуйста, смотрите прикрепленный код ниже.

public class Lang{
    public static void langInit(){
        java.lang.reflect.Field[] langStringFields = R.string.class.getFields();

        Log.d(Global.TAG,"--> Lang Listing: " + langStringFields.length);
        Log.d(Global.TAG,"--> Pref for language:");

        String prefInLang = Prefs.cPrefsGet.getString("in_lang","en");

        String fieldName = null;
        String fieldValue = null;
        String newFieldName = null;

        String tmpA = "one";

        for (int i=0; i<langStringFields.length; i++){
            java.lang.reflect.Field field = langStringFields[i];

            fieldName = field.getName();

            try {
                fieldValue = Global.gActivity.getString(field.getInt(R.string.class));
            } catch (Exception e) {
                e.printStackTrace();
            }

            if (fieldName.substring(0,2).equals("lo")){
                try {
                    newFieldName = R.string.class.getField(prefInLang + "_" + fieldName.substring(3)).getName();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                Log.d(Global.TAG,"--> Field: " + fieldName + "value: " + fieldValue + "new field:" + newFieldName);
                try {
                    java.lang.reflect.Field field2 = Class.forName(R.string.class.getName()).getDeclaredField(newFieldName);
                    field2.setAccessible(true);
                    field2.set(R.string.class,tmpA.toString());
                }catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

Ответы [ 4 ]

3 голосов
/ 29 марта 2011

Использовать встроенный механизм локализации , представленный в Android.Вам не нужно ничего менять.Вам просто нужно указать новый strings.xml для каждой локали.

2 голосов
/ 29 марта 2011

Если вы хотите изменить текущий язык для своего приложения, вы можете сделать это, используя стандартные встроенные функции локализации и программно меняя язык .

1 голос
/ 29 марта 2011

Я считаю, что использование встроенных в Android функций локализации предпочтительнее, чем ручная реализация. Вот руководство, к которому вы можете обратиться:

http://developer.android.com/guide/topics/resources/localization.html

Если, конечно, мы неправильно поняли ваш вариант использования, но на самом деле это звучит так, будто вы пытаетесь выполнить стандартную локализацию: -)

Бруно Оливейра, инженер-разработчик программ, Google

1 голос
/ 29 марта 2011

вам лучше добавить значение локали к вашим ресурсам и продублировать их: по одному для каждого языка, что позволит устройству выбрать правильный вариант в соответствии с его настройками: проверьте его там http://developer.android.com/resources/tutorials/localization/index.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...