3

我的问题是所有文本都来自网络服务。所以,一开始,我调用 web 服务,我必须在 strings.xml 中设置文本。我知道在 strings.xml 中编写这是不可能的,但我们在 iOs 上遇到了同样的问题,并且在这里找到了解决方案http://iosapplove.com/archive/2013/01/localizable-strings-how-to-load-translations-动态并在您的 iphone-app/ 内部使用它

所以我的问题是:在android上有类似的方法吗?(我想不是)

它存在使用数据库或 sharedPreferences 等替代方式,但这些解决方案不会很有效。此外,该应用程序将包含多种语言。

所以我的第二个问题:最好的方法是什么?

4

1 回答 1

0

如您所知,APK 中不存在 strings.xml 文件。这意味着无法更改 getResources().getString(R.string.mystring) 将返回的内容。

您说“这是客户的要求”。我的建议是你告诉客户“这是个坏主意”。因为确实如此。

如果客户仍然存在,我猜您唯一的选择是以您需要的任何语言下载文本并将其存储在您的应用程序外部文件存储中。使用属性文件的建议很好。将其作为 InputStream 加载从中获取字符串

您是否考虑过如果应用程序处于飞行模式或启动时没有可用网络会发生什么?你会提供默认值吗?

此外,使用此解决方案,您将无法在 TextViews 中设置任何文本或 XML 中的类似内容,因为系统无法访问您在属性文件中下载的翻译。

如果您仍然继续这样做,我还建议您将属性文件包装到其他一些类中,如果属性文件中不存在文本,或者如果文本不存在,则回退到您的 strings.xml 中的任何文本由于某种原因没有下载:

class TextRetriever {

    // the downloaded texts go here
    private Properties properties;

    private Context context;

    public String getString(String key) {
        String s = properties.getProperty(key);
        // not found in properties file
        if(s == null) {
            // fall back to value in strings.xml
            s = context.getResources().getIdentifier(key, "string", context.getPackageName())
        }
        return s;
    }
}
于 2013-05-31T11:37:59.240 回答