我的问题是所有文本都来自webservices。所以,在开始时,我调用webservice,我必须在strings.xml中设置文本。我知道在strings.xml中写一下这是不可能的,但我们在iOs上遇到了同样的问题,并且在这里找到了一个解决方案http://iosapplove.com/archive/2013/01/localizable-strings-how-to-load-translations-dynamically-and-use-it-inside-your-iphone-app/。
所以我的问题是:Android上有类似的方法吗? (我认为没有)
它存在替代方式,如使用数据库或sharedPreferences,但这些解决方案不会非常有效。此外,该应用程序将包含多种语言。
所以我的第二个问题:最好的方法是什么?
答案 0 :(得分:0)
如您所知,APK中不存在strings.xml文件。这意味着没有办法改变getResources()。getString(R.string.mystring)将返回的内容。
你说“这是客户的要求”。我的建议是你告诉客户“这是一个坏主意”。因为它确实是。
如果客户仍然存在,我猜您唯一的选择是以您需要的任何语言下载文本并将其存储在您的应用程序外部文件存储中。使用properties文件的建议很好。 Load it as an InputStream和get strings from it。
您是否考虑过如果应用处于启用模式或启动时没有网络可能会发生什么?你会提供默认值吗?
此外,使用此解决方案,您将无法在TextViews或类似的XML中设置任何文本,因为系统无法访问属性文件中下载的翻译。
如果您仍然继续这样做,我还建议您将Properties文件包装到其他类中,如果属性文件中不存在文本,则回退到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;
}
}