繁体   English   中英

来自服务器的Android string.xml资源文件

[英]Android string.xml resource file from server

众所周知,例如,我们无法在运行时更改res文件夹的值和文件,

我正在开发一个应用程序,其中我们支持25种以上的语言,由于这些字符串文件,APK大小急剧增加,我们非常关注APK的大小,因此我们不想保留所有这些string.xml项目中本地的string.xml文件(在apk中)。

我们正在考虑的是,我们将在res内仅保留英语string.xml ,而所有其他语言环境string.xml均应根据需要在应用程序启动时从服务器下载。

因此,我们计划创建自己的getResource( key, currentLocale) ,然后将从要从服务器下载的XML(或文本)文件中读取该文件。

请提出任何更好的主意或解决方法,

感谢你的支持

不幸的是,编译后无法更改资源。 您的唯一方法是从服务器下载语言shema(即,当应用启动时)并以sqlite,文件或共享首选项(存储选项: https//developer.android.com/ )保存(或根据需要更新) guide / topics / data / data-storage.html#filesInternal )。

您知道Android App Bundle吗? 这是将您的应用发布到Google Play的一种新方法,您无需重构代码即可使用它,而且您从Play商店下载的APK会更小?

来自Google Developers:

新的应用发布格式Android App Bundle是一种更高效的构建和发布应用的方式。 Android应用程序包可让您更轻松地以较小的应用程序大小提供出色的体验,从而支持当今可用的各种Android设备。 切换很容易。 您无需重构代码即可开始从较小的应用程序中受益。

在Android Studio 3.2或更高版本以及Unity 2018.3 beta版本中可用。

因此,如果您的项目有25种语言,并且我的设备已将英语配置为设备语言,那么当我去下载您的APP时,它将仅获得strings.xml文件,其他strings.xml保留在Google Play中,并且如果您更改设备如果语言是葡萄牙语,则Google Play应用将尝试获取葡萄牙语的新strings.xml并删除带有英文文本的旧文件。

请尝试其他选项之前,请先尝试此操作,因为这是推荐的方法,您无需执行其他任何操作, 只需将您的应用作为应用捆绑包生成并发送到Play商店即可 ;如果要测试,请下载应用,然后更改设备语言,您会看到Google Play再次下载该应用的新语言。

希望无论如何我能帮助您。

在这里Sqlite Option更适合您的情况。

以下是数据库表(例如LangTable)的结构

--------- ---------- -------- -------- ------------ ------ --
langKey Locale_En Local_hn Local_Fr ................................ n

---------- ---------- --------- -------- ------ ------- ---

btnOk好... ...... .....

btnCancel取消................

现在这里是获取相关本地字符串的方法

public String getResource(String key, String local){

String value = "";

value = Select local from LangTable where langKey = 'key';

return value;

} 

这可以通过Google Play的AppBundle功能来实现。 他的工作之一是允许以后需要时或在您决定时下载其他部件的应用程序(字符串res)。

还有一个不好的方法! 您可以完全忽略getString()并编写一个从其他位置(如下载的文件)检索字符串的方法

我建议您遵循合理的AppBundle方法,而不必与操作系统抗争。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM