如何为字符串值等多种语言创建android SQLite数据库

时间:2016-03-20 21:56:17

标签: android sqlite

Android中是否有能力为英语和其他语言创建SQLite数据库文件,其行为与字符串值相似?我所要做的就是处理一个代码,Android根据设备语言选择合适的数据库。

1 个答案:

答案 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) {
        ...
    }

    ...

}

在此示例中,根据语言打开不同的数据库。但同样地,您可以决定访问唯一数据库的不同表,或者从数据库的各个表中选择不同的字段。