如您所知,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;
}
}