Android是否可以为英语和其他语言创建SQLite数据库文件,并且其行为类似于字符串值?我要做的就是处理一个代码,然后Android根据设备语言选择合适的数据库。
您可以使用values本地化的资源目录来执行此操作:
/res
|
----/values
| |
| ---- strings.xml <-- contains your default language values (english for example)
|
----/values-de
| |
| ---- strings.xml <-- contains your german languages values
|
----/values-fr
| |
| ---- strings.xml <-- contains your french languages values
|
(etc)
Run Code Online (Sandbox Code Playgroud)
在每个这些本地化文件中,定义数据访问代码的特定于语言的参数。在此示例中,这是数据库的文件名:
默认strings.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="db_name">myDatabase_EN</string>
...
</resources>
Run Code Online (Sandbox Code Playgroud)“ -de” strings.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="db_name">myDatabase_DE</string>
...
</resources>
Run Code Online (Sandbox Code Playgroud)“ -fr” strings.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="db_name">myDatabase_FR</string>
...
</resources>
Run Code Online (Sandbox Code Playgroud)依此类推,您的应用可以处理每种语言。
然后,由于使用,数据库文件选择对于您的代码变得透明Context.getString(int resId)。此方法自动选择String与用户设备相对应的资源Locale。如果没有本地化的String匹配getString()选择默认值:
private static class DatabaseHelper extends SQLiteOpenHelper {
...
private DatabaseHelper(Context ctx) {
super(ctx, ctx.getString(R.string.db_name), null, dbVersion);
// R.string.db_name corresponds to the localized String
// resource "db_name", based on the users's device Locale.
}
@Override
public void onCreate(SQLiteDatabase db) {
...
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,根据语言打开了一个不同的数据库。但是以同样的方式,您可以决定访问唯一数据库的差异表,或从数据库的各个表中选择差异字段。