2011-03-29 137 views
3

我正在尋找一種方法來動態更改字符串資源的值。我試圖使用反射,但它聲稱'場的無效價值'。以編程方式更改R.string的值?

我在佈局中使用字符串作爲值,但需要將它們交換爲不同的語言。

請參閱下面附加的代碼。

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(); 
       } 
      } 
     } 
    } 
} 
+0

你究竟想要做什麼? Android支持使用單獨資源文件的本地化。 – 2011-03-29 15:04:45

回答

2

如果您想更改當前的語言,可以使用標準的內置本地化功能和changing locale programatically

+0

更改本地公關這是我想要的。 – 2011-07-02 05:05:20

3

使用內置機制localization,在android中引入。你不需要改變任何東西。你只需要爲每個語言環境指定新的strings.xml。

+0

不,我不是在尋找本地化,除非我可以設定它的程序化。用戶將從菜單中選擇應用程序所需的語言,而不是基於其本地設備。 – 2011-03-29 15:53:26

+0

然後我會建議您實現您自己的本地化子系統,而不是嘗試設置某些東西來生成類。我不知道爲什麼你需要這個,但是它不是Android上常見的用戶體驗,沒有應用內本地化。 – 2011-03-29 17:31:51

1

你應該一個區域值,而添加到您的資源,並複製它們:一個針對每種語言,從而讓設備選擇根據它的設置是正確的:檢查有http://developer.android.com/resources/tutorials/localization/index.html

+0

不,我不是在尋找本地化,除非我可以設定它的程序化。用戶將從菜單中選擇應用程序所需的語言,而不是基於他們的本地設備 – 2011-03-29 15:54:08

+0

,那麼我想這是爲了您的應用程序的目的,我發現這是一個有趣的問題:我現在沒有時間專注於此,但快速搜索給了我這些帖子:請保持我張貼在您的進度;) http://stackoverflow.com/questions/2596352/android-change-language-settings-locale-for-the-device http ://stackoverflow.com/questions/2078289/android-controling-the-user-language http://stackoverflow.com/questions/2264874/android-changing-locale-within-the-app-it-本身 http ://stackoverflow.com/questions/2324418/android-forced-locale-resetted-on-orientation-changes – olamotte 2011-03-29 17:33:01

1

我相信使用Android的內置在本地化功能方面優於手工實現。這裏是你可以參考指南:

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

除非,當然,我們誤解了你的使用情況,但它真的喜歡你的聲音正在嘗試做標準本地化:-)

布魯諾開發人員項目工程師Oliveira Google