Android中是否有能力为英语和其他语言创建SQLite数据库文件,其行为与字符串值相似?我所要做的就是处理一个代码,Android根据设备语言选择合适的数据库。
答案 0 :(得分:4)
您可以使用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)
在每个本地化文件中,定义数据访问代码的特定于语言的参数。在此示例中,这是数据库的文件名:
默认strings.xml
档案:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="db_name">myDatabase_EN</string>
...
</resources>
&#34; -de&#34; strings.xml
档案:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="db_name">myDatabase_DE</string>
...
</resources>
&#34; -fr&#34; strings.xml
档案:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="db_name">myDatabase_FR</string>
...
</resources>
对于您的应用处理的每种语言都是如此。
然后,由于使用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) {
...
}
...
}
在此示例中,根据语言打开不同的数据库。但同样地,您可以决定访问唯一数据库的不同表,或者从数据库的各个表中选择不同的字段。