【问题标题】:The way to change database helper to support multiple languages?更改数据库助手以支持多种语言的方法?
【发布时间】:2016-01-16 07:16:07
【问题描述】:

这是我的 dbhelper 代码。我想问一下这个数据库是否可以支持多种语言?是否需要使用 google translate api 或者我应该为另一种语言创建另一个数据库?

private DatabaseHelper dbHelper;
private SQLiteDatabase db;

private static final String K_ID = "ID";
private static final String K_NAME = "NAME";
private static final String K_BEN = "BENEFIT";
private static final String TABLE = "PLANT";

private static class DatabaseHelper extends SQLiteOpenHelper {
    DatabaseHelper(Context context) {
        super(context, "DBPLANT", null, 1);
    }

    public void onCreate(SQLiteDatabase db) {

        String sql = "CREATE TABLE " + TABLE + " (" + K_ID
                + " INTEGER PRIMARY KEY ," + K_NAME + " TEXT , " + K_BEN
                + " TEXT);";
        db.execSQL(sql);
        sql = "INSERT INTO "
                + TABLE
                + " ("
                + K_NAME
                + ","
                + K_BEN
                + ") VALUES('ALOE (Aloe Vera)','This plant has hundreds of uses, the most popular being its ability to alleviate the pain of burns and to speed their healing. Immediately immerse the burn in cold water or apply ice until the heat subsides, then generously apply the aloeAloe may also be applied to any cut or skin abrasion, and onto skin eruptions, remarkably speeding healing. To relieve the pain and itching of hemorrhoids, carve out a suppository sized chunk of the inner leaf gel and insert into the rectum.');";
        db.execSQL(sql);
        sql = "INSERT INTO "
                + TABLE
                + " ("
                + K_NAME
                + ","
                + K_BEN
                + ") VALUES('GARLIC (Allium sativum)','Best known for its antibiotic effect, garlic bulbs or the milder garlic greens can be eaten raw at the onset of a cold or flu. Garlic oil is effectively used for ear infections. It is easily made by finely chopping enough fresh organic garlic bulbs to fill a jelly jar, and covering them with organic olive oil.');";
        db.execSQL(sql);
        sql = "INSERT INTO "
                + TABLE
                + " ("
                + K_NAME
                + ","
                + K_BEN
                + ") VALUES('GINGER (Zinziber officiale)','Ginger has a carminative effect, which means that it will help relieve digestive problems which result in gas formation. It is also a diaphoretic, used both as a tea and added to a soaking bath to stimulate sweating and reduce fevers.');";
        db.execSQL(sql);
        sql = "INSERT INTO "
                + TABLE
                + " ("
                + K_NAME
                + ","
                + K_BEN
                + ") VALUES('COCONUT','White meat and water from the cavity are used for heart conditions, dysentery, fever, pain, and digestive and bladder problems, to quench thirst and as an aphrodisiac. To treat diarrhea, meat from young fruits is mixed with other ingredients and rubbed onto the stomach. Oil prepared from boiling coconut milk is thought of as antiseptic and soothing and so is smoothed onto the skin to treat burns, ringworm and itching.');";
        db.execSQL(sql);
        sql = "INSERT INTO "
                + TABLE
                + " ("
                + K_NAME
                + ","
                + K_BEN
                + ") VALUES('Carallia Brachiata','The bark was extracted with petroleum ether, ethyl acetate and methanol successively. All the extracts were screened for wound healing activity by excision and incision models in Wistar rats. The ethyl acetate and methanol extracts were found to possess significant wound healing activity. The extracts revealed the presence of sterols or triterpenoids, flavonoids, phenols, tannins, carbohydrates, fixed oils and fats.');";
        db.execSQL(sql);
        sql = "INSERT INTO "
                + TABLE
                + " ("
                + K_NAME
                + ","
                + K_BEN
                + ") VALUES('Ficus Hispida','The fruits are bitter, refrigerant, astringent, acrid, anti-dysenteric, anti-inflammatory, depurative, vulnerary, haemostatic and galactagogue. They are useful in ulcere, leucoderma, psoriasis, anaemia, haemorrhoids, jaundice, epistaxis, stomatorrhagia, inflammations, intermittent fever and vitiated conditions of pitta.');";
        db.execSQL(sql);
        sql = "INSERT INTO "
                + TABLE
                + " ("
                + K_NAME
                + ","
                + K_BEN
                + ") VALUES('Leea Indica','A decoction of the root is given in colic, is cooling and relieves thirst. In Goa, the root is much used in diarrheal and chronic dysentery. The roasted leaves are applied to the head in vertigo. The juice of the young leaves is a digestive. Plant pacifies vitiated pitta, diarrhea, dysentery, colic, ulcers, skin diseases, and vertigo.');";
        db.execSQL(sql);
        sql = "INSERT INTO "
                + TABLE
                + " ("
                + K_NAME
                + ","
                + K_BEN
                + ") VALUES('Mesua Ferrea','Flowers are acrid, anodyne, digestive, constipating, and stomachic. They are used in treating asthma, leprosy, cough, fever, vomiting and impotency. The seed oil pacifies vata, and also good for skin diseases and rheumatism');";
        db.execSQL(sql);
        sql = "INSERT INTO "
                + TABLE
                + " ("
                + K_NAME
                + ","
                + K_BEN
                + ") VALUES('Trema Orientalis','It has been used for medicinal purposes including the treatment of respiratory, inflammatory, and helminthic diseases. Almost every part of the plant is used as medicine in various parts of Africa.');";
        db.execSQL(sql);
        sql = "INSERT INTO "
                + TABLE
                + " ("
                + K_NAME
                + ","
                + K_BEN
                + ") VALUES('Murraya Paniculata','The decoction of the leaves can be used as a gargle to treat toothache. The leaves are frequently used to treat pain due to scalding. This decoction can be given orally to treat body aches, as a tonic, and for expelling tape worm');";
        db.execSQL(sql);
    }

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE);
        onCreate(db);
    }
}

/**
 * Upgrade database
 */
public void Reset() {
    dbHelper.onUpgrade(this.db, 1, 1);
}

/**
 * Constructor
 * 
 * @param ctx
 *            the activity context
 */
public DBHelper(Context ctx) {
    dbHelper = new DatabaseHelper(ctx);
}

/**
 * Open database connection
 * 
 * @return the database connection
 * @throws SQLException
 */
public DBHelper open() throws SQLException {
    db = dbHelper.getWritableDatabase();
    return this;
}

/**
 * Close database connection
 */
public void close() {
    dbHelper.close();
}

public boolean createEntry(String name, String benefit) {
    ContentValues cv = new ContentValues();
    cv.put(K_NAME, name);
    cv.put(K_BEN, benefit);
    return db.insert(TABLE, null, cv) != -1;
}

public boolean updateEntry(String name, String benefit, String id) {
    ContentValues cv = new ContentValues();
    cv.put(K_NAME, name);
    cv.put(K_BEN, benefit);
    return db.update(TABLE, cv, K_ID + " = ?", new String[] { id }) > 0;
}

public PlantList getList() {
    PlantList plants = new PlantList();
    Cursor cur = db.rawQuery("SELECT " + K_ID + " ," + K_NAME + " FROM "
            + TABLE, null);

    if (cur.moveToFirst()) {
        do {
            plants.addData(cur.getString(cur.getColumnIndex(K_ID)),
                    cur.getString(cur.getColumnIndex(K_NAME)));
        } while (cur.moveToNext());
    }
    cur.close();
    return plants;
}

public PlantList getQuery(String query) { //search data
    PlantList plants = new PlantList();
    Cursor cur = db.rawQuery("SELECT " + K_ID + " ," + K_NAME + " FROM "
            + TABLE + " WHERE " + K_NAME + " LIKE '%" + query + "%'", null);

    if (cur.moveToFirst()) {
        do {
            plants.addData(cur.getString(cur.getColumnIndex(K_ID)),
                    cur.getString(cur.getColumnIndex(K_NAME)));
        } while (cur.moveToNext());
    }
    cur.close();
    return plants;
}

public String[] getDetail(String id) {
    String data[] = new String[2];
    Cursor cur = db.query(TABLE, new String[] { K_NAME, K_BEN }, K_ID + "="
            + id, null, null, null, null);

    if (cur.moveToFirst()) {
        data[0] = cur.getString(cur.getColumnIndex(K_NAME));
        data[1] = cur.getString(cur.getColumnIndex(K_BEN));
    }
    cur.close();
    return data;
}

public String getName(String id) {
    String name = null;
    Cursor cur = db.query(TABLE, new String[] { K_NAME }, K_ID + "=" + id,
            null, null, null, null);

    if (cur.moveToFirst()) {
        name = cur.getString(cur.getColumnIndex(K_NAME));
    }
    cur.close();
    return name;
}

public boolean deleteEntry(String id) {
    return db.delete(TABLE, K_ID + " = ?", new String[] { id }) > 0;
}

}

【问题讨论】:

    标签: android


    【解决方案1】:

    是的,您可以使用相同的数据库 SQLite 始终将文本数据存储为 Unicode,使用创建数据库时指定的 Unicode 编码。数据库驱动程序本身负责将数据作为您的语言/平台使用的编码中的 Unicode 字符串返回。

    sqlite 在内部以 UTF-8 或 UTF-16 对所有字符串进行编码(有一个针对每个数据库的选项),但是因为它总是根据需要转换它们(转换为一个或另一个以进行比较以及与 java.lang.lang 之间的转换。 API 中的字符串),你甚至不需要关心。

    在您的数据库表中,您可以为不同语言的语言字符串添加不同的列,并仅从该特定列获取数据。

    在您的应用程序上,您可以为用户提供更改语言的选项。那时您可以根据所选语言更改列并仅对该列执行添加/编辑操作。

    【讨论】:

    • 好的。那么我的下一个问题将是我将如何编写代码以更改数据库中的语言。对于我的应用程序,用户能够添加/编辑数据库,如果应用程序处于运行时,当用户添加新数据时,我不知道如何获取新数据以将其翻译成另一种语言..
    • 你的意思是如果一个用户在“En”数据中键入英文单词,那么列(英文)将收集数据,用户只能在列(英文)中看到它?如果用户将“En”语言更改为其他语言,用户在其他语言栏中看不到“En”数据?
    • 这取决于您的要求。您可以将其翻译并存储在其他列中,或者仅允许用户添加/编辑她/他的语言。
    • 你知道翻译数据库中数据的细节吗?
    • 为什么要翻译数据,我在回答中明确提到 sqlite 支持 UTF 格式存储数据。您可以在其中存储任何语言字符串。
    【解决方案2】:

    与其创建单独的数据库,不如向表中添加另一列指示语言并将本地化字符串存储在同一个表中。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-17
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 2011-04-07
    相关资源
    最近更新 更多