在DB中存储可翻译的android字符串的最佳实践

时间:2014-11-23 11:27:24

标签: android mongodb android-widget persistent-storage

在我的一个应用程序表单中,我有一个从字符串数组android资源填充的微调器,因此管理转换在android应用程序中创建其他XML文件。表单数据通过API保存在mongodb中,如果相关,我也可以完全控制它们。

该应用程序将以5种语言启动(可能会在以后增长),因此我可以获得相同字符串的5个不同“版本”,但我希望应用程序在应用程序所在的语言中看到字符串(独立于它所存储的语言。

如果可能的话,我希望使用原生的Android翻译功能实现这一点,即在应用程序中发送5个XML文件,每种语言一个。 我也想让服务器代码尽可能笨。

截至目前,我只能考虑在数据库中存储索引,然后使用开关/案例循环,在应用程序视图中显示数据。我根本不喜欢这个,因为可能的选项必须是硬编码的,任何改变都意味着新的应用程序版本。

最佳做法是什么?

1 个答案:

答案 0 :(得分:2)

根据您的评论,我了解您的实际问题是将微调器值存储在数据库中。

正如您在问题中所说,您不应该存储微调器的字符串,而是存储表示该值的整数。然后使用带有List<的微调器。整数>而不是列表<字符串>。

没有含义的int索引的替代方法是枚举:

public enum SpinnerValues {
    EXAMPLE_1(R.string.example1_string),
    EXAMPLE_2(R.string.example2_string),
    EXAMPLE_3(R.string.example3_string);

    private int mStringResId;

    private SpinnerValues(int stringResourceId) {
        mStringResId = stringResourceId;
    }

    public int getStringResId() {
        return mStringResId;
    }
}

在这种情况下,您的微调器数据将是List< SpinnerValue>你可以使用序数或枚举的字符串表示将你的枚举存储在数据库中(我会建议使用字符串值,以便更改枚举值的顺序不会破坏你的数据库)。