【问题标题】:Change value of R.string programmatically?以编程方式更改 R.string 的值?
【发布时间】:2011-07-25 09:00:45
【问题描述】:

我正在寻找一种动态更改字符串资源值的方法。我曾尝试使用反射,但它声称“字段值无效”。

我在布局中使用字符串作为值,但需要将它们换成不同的语言。

请参阅下面的附加代码。

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

【问题讨论】:

  • 你到底想做什么? Android 支持使用单独的资源文件进行本地化。

标签: android string resources


【解决方案1】:

使用localization的内置机制,在android中引入。你不需要改变任何东西。您只需为每个语言环境指定新的 strings.xml。

【讨论】:

  • 不,我不是在寻找本地化,除非我可以通过编程方式进行设置。用户将从菜单中选择应用程序所需的语言,而不是根据他们的本地设备。
  • 那么我建议您实现自己的本地化子系统,而不是尝试为生成的类设置一些东西。我不知道你为什么需要这个,但在 android 上进行应用内本地化并不是常见的用户体验。
【解决方案2】:

如果您想为您的应用更改当前语言,您可以使用标准的内置本地化功能和changing locale programatically

【讨论】:

  • 以编程方式更改本地是我一直在寻找的。​​span>
【解决方案3】:

您应该为您的资源添加一个区域设置值并复制它们:每种语言一个,从而让设备根据其设置选择正确的设置:检查它http://developer.android.com/resources/tutorials/localization/index.html

【讨论】:

【解决方案4】:

我相信使用 Android 的内置本地化功能比手动实现它更可取。以下是您可以参考的指南:

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

当然,除非我们误解了您的用例,但听起来您确实在尝试进行标准本地化 :-)

Bruno Oliveira,Google 开发人员项目工程师

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 2020-02-18
    • 1970-01-01
    相关资源
    最近更新 更多