用于微调器列表项的android多语言

时间:2014-02-28 02:56:13

标签: android sqlite spinner multilingual

我有一个英文列表微调项目。当用户选择项目时,按确认它会将微调器中selectedItem的值保存为SQLite,作为密码。现在应用程序支持其他语言,spinner中的值基于语言更改,但是当该值等于英文值保存在数据库中时,它必须返回true。

Ex:英语中的微调器列表项:Flag,Hat,Table。

德语中的微调器列表项:Flagge,Hut,Tabelle。

当用户选择Flag时,它会将数据库中的Flag保存为密码。当应用程序再次加载时,用户选择Flag(英文)或Flagge(德语),它必须返回正确的传递。如果我们有多个数据库用于多语言,我们必须更新所有数据库,并在spinner中使用正确的转换值,但它是离线应用程序。有没有解决方案?

3 个答案:

答案 0 :(得分:2)

将字符串资源与语言限定符一起使用。

例如

RES / strings.xml中

<strings>
    <string name="flag">Flag</string>
    <string name="computer">Computer</string>
    <string name="table">Table</string>
</strings>

RES /串-de.xml

<strings>
    <string name="flag">Flagge</string>
    <string name="computer">Computer</string>
    <string name="table">Tabelle</string>
</strings>

调用context.getResources().getString("flag")方法将返回属于用户在系统设置中选择的语言的String。如果您没有为用户的语言提供字符串,则只会使用常规strings.xml中的字符串。

使用字符串的标识符int(例如,R.string.flag)作为微调器适配器的键,以确保每种语言的数据库键都相同。

答案 1 :(得分:0)

您可以尝试使用标记来管理这种情况

  if (Locale.getDefault().getDisplayLanguage().equals("Deutsch")) {
       //put flag here
    }

之后,看看是什么旗帜语言并采取行动

此外,如果您有其他语言的资源,请将其放入正确的文件夹中,如:

values-de
drawable-de

答案 2 :(得分:0)

我不知道这是否是最好的方法,但我是我在其中一个项目中使用的解决方案。

首先,我创建了一个存储数据的表:

CREATE TABLE my_other_table
( id INTEGER PRIMARY KEY AUTOINCREMENT,
  potato TEXT);

然后我创建了一个表来存储翻译:

CREATE TABLE translations
(id INTEGER,
language TEXT NOT NULL,
value TEXT NOT NULL,
FOREIGN KEY(id) REFERENCES my_other_table(id));

在我的数据库助手类上,我有一个方法来检索正确的值:

public List<MyObject> getValues() {
        List<MyObject> myObjects = new ArrayList<MyObject>();
        openDatabase();
        Cursor cursor = database.query(DBHelper.TABLE_FOR_MY_OBJECT,arrayWithAllMyColumns, null,null, null, null, null);
        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
            Challange challange = cursorToChallange(cursor);
            Cursor descriptionCursor = database.query(DBHelper.TABLE_TRANSLATIONS, new String[]{DBHelper.COLUMN_VALUE}, DBHelper.COLUMN_LANGUAGE+" = ?",new String[]{Locale.getDefault().toString()}, null, null, null);
            myObject.setDescription(descriptionCursor.getString(0));
            myObjects.add(myObject);
            cursor.moveToNext();
        }
        cursor.close();
        closeDatabase();
        return myObjects;
    }

上面的代码只是为了有一个想法,如果你需要更多的帮助,只需要问...