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

用于微调器列表项的android多语言,android,sqlite,spinner,multilingual,Android,Sqlite,Spinner,Multilingual,我有一个英语列表微调器项目。当用户选择一个项目时,按Confirm可将spinner中selectedItem的值保存为SQLite,作为密码。现在该应用程序支持其他语言,spinner中的值会根据语言进行更改,但当该值等于保存在数据库中的英语值时,该值必须返回true 例如:英语中的微调器列表项:旗帜、帽子、表格 德语微调器列表项:Flagge、Hut、Tabelle 当用户选择标志时,它将标志作为密码保存在数据库中。当应用程序再次加载时,用户选择Flag(英语)或Flagge(德语),它必须

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

例如:英语中的微调器列表项:旗帜、帽子、表格

德语微调器列表项:Flagge、Hut、Tabelle


当用户选择标志时,它将标志作为密码保存在数据库中。当应用程序再次加载时,用户选择Flag(英语)或Flagge(德语),它必须返回正确的密码。如果我们有multi-DB for multi-Language,我们必须使用spinner中值的正确转换来更新所有DB,但它是脱机应用程序。有什么解决办法吗?

您可以尝试使用一个标志来管理这种情况

  if (Locale.getDefault().getDisplayLanguage().equals("Deutsch")) {
       //put flag here
    }
之后,看看旗语是什么,然后采取行动

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

values-de
drawable-de

etc

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

比如说

res/strings.xml

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

旗帜
电脑类
桌子
res/strings-de.xml

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

弗拉格
电脑类
积分榜
调用
context.getResources().getString(“flag”)
方法将返回属于用户在系统设置中选择的语言的字符串。如果不为用户的语言提供字符串,它将只使用常规
strings.xml
中的字符串


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

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

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

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;
    }
public List getValues(){
List myObjects=new ArrayList();
openDatabase();
Cursor Cursor=database.query(我的对象的DBHelper.TABLE,带mycolumns的数组,null,null,null,null);
cursor.moveToFirst();
而(!cursor.isAfterLast()){
Challange Challange=光标或光标(光标);
Cursor descriptionCursor=database.query(DBHelper.TABLE_TRANSLATIONS,新字符串[]{DBHelper.COLUMN_VALUE},DBHelper.COLUMN_LANGUAGE+“=?”,新字符串[]{Locale.getDefault().toString()},null,null,null);
myObject.setDescription(descriptionCursor.getString(0));
myObjects.add(myObject);
cursor.moveToNext();
}
cursor.close();
closeDatabase();
返回对象;
}

上面的代码只是一个想法,如果您需要更多帮助,请询问……

您能分享一些代码并向我解释一件事吗,问题是:您需要用英语保存所选项,然后在加载值时需要用其他语言显示该项?但我需要从sqlite数据库保存和加载值如何从flag检索键?如果选择了返回标志,我下一步该怎么办?据我所知,字符串的标识符int(例如,R.string.flag)在启动/更新安装过程中并不持久。您是否应该利用字符串数组资源?最后,微调器不是关于列表,而是映射到ID的文本值的映射?如何从flag中检索密钥?如果选择了返回标志,我下一步该怎么办?据我所知,字符串的标识符int(例如,R.string.flag)在启动/更新安装过程中并不持久。我们应该利用array res吗?归根结底,spinner不是关于列表,而是关于映射到id的文本值的映射@Mark BuikemaI使用sqlite数据库,所以你的意思是我为每种语言创建每个数据库?你可以通过名称tablename创建另一个表\u de维护你的名称并在末尾添加\u de,如果你检测到de language,但用户只选择一次,因此我们需要翻译,将该值插入到每个不同的语言数据库?该应用程序处于脱机状态,无法使用google Translate编辑我的问题。我如何从用户那里获得价值,然后将其转换并更新为表转换?这是一款离线应用程序。