从外部json文件获取xml中的语言翻译

时间:2015-01-02 16:47:33

标签: android json translation

作为我正在开发的应用程序的一部分,请求必须下载包含需要在app中使用的语言翻译的JSON文件,而不是常用的strings.xml文件,因为这样任何翻译都可以可以通过更新某个Web门户上的外部JSON文件来更改应用程序,并且无需在每次要更改语言翻译时都进行新的构建。

我已经做到了这一点,一切都运行良好,方式如下: 例如,如果活动开始后我在xml中有按钮,我可以引用该按钮并从我在启动时下载的JSON中设置它的文本。

btnLogin = (Button) v.findViewById(R.id.btnLogin);

// reads translation from json that is stored in external application directory
btnLogin.setText(ResourceManager.getString("btnLogin"));

但我的问题是,有什么方法可以避免始终从活动中设置此文本,我能以某种方式从定义此按钮的XML文件中执行此操作吗?

<Button
        android:id="@+id/btnLogin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="{ResourceManager.getString("btnLogin")}"/>

有没有可能让我从xml调用某个函数并将其结果绑定到text属性,还是有其他方法可以避免引用所有按钮/ textview以及其他来自活动和设置文本的控件?

1 个答案:

答案 0 :(得分:0)

您是否尝试在Application类中覆盖getResources()然后 返回资源的扩展版本。

好的,我尝试了这个,它似乎适用于我的xml文件中的大多数资源。 您可能必须在多个地方覆盖它。我只是在我的Application类中覆盖它。

private MyResources resources;

@Override
public Resources getResources() {
    if (resources == null) {
        resources = new MyResources(super.getResources());
    }
    return resources;
}

class MyResources extends Resources {


    public MyResources(Resources resource) {
        super(resource.getAssets(), resource.getDisplayMetrics(), resource.getConfiguration());
    }

    public String getString(int resId) {
        return "Bob";  // Use your ResourceManger here
    }
}

这对我有用..