2014-02-28 46 views
0

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

例如:国旗,帽子,表:英语微调列表项。 Flagge,必胜客,Tabelle:在德国

微调列表项。

当用户选择标志,它在数据库保存标示为密码。当应用程序再次载入时,用户选择标记(英语)或标记(德语),它必须返回,这是正确的传球。如果我们有多个数据库用于多语言,我们必须更新所有数据库的右侧翻译,以获得微调器中的值,但它是离线应用程序。有没有解决方法?

+0

你可以分享一些代码,也可以向我解释一件事情,问题是:您需要o将所选项目保存为英文,然后在加载需要使用其他语言显示项目的值时? – GhostDerfel

+0

是的,就是这样。 – user3342507

回答

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; 
    } 

上面的代码只是有一个想法,如果你需要更多的h elp只是问...

+0

我已编辑我的问题。我如何从用户那里获得价值,然后翻译并更新到表翻译?它是离线的应用程序。 – user3342507

+0

你已经在你的数据库中有翻译了,对吧? – GhostDerfel

0

,你可以尝试用一个标志

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

来管理这种情况之后,看看有什么标志语言,使你的行动

此外,如果你有其他语言的资源把它放到正确的文件夹像:

values-de 
drawable-de 

+0

我使用sqlite数据库,所以你的意思是我为每种语言创建每个数据库? – user3342507

+0

您可以通过名称创建其他表tablename_de维护您的名字并在_de末尾添加如果您检测到德语 –

+0

但用户只选择一次,因此我们有翻译,将该值插入到每个差异语言数据库?该应用程序处于脱机状态,不能用户谷歌翻译 – user3342507

1

使用字符串资源带语言限定符。

例如

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")方法将返回属于语言字符串的用户已在系统设置中选择。如果您没有为用户的语言提供字符串,则只会使用常规的strings.xml中的字符串。

使用字符串的标识符INT(例如,R.string.flag)为您的微调适配器,使键确保数据库关键是对每一种语言相同。

+1

但我需要保存和从sqlite数据库中加载值 – user3342507