2014-06-10 54 views
2

我在我的应用程序中有一个微调,用户选择是否要通过“包含”搜索“开始于”“结束于”或“等于”,用户选择的选项存储到带有其他信息的json并发送到服务器以检索结果。现在,我使用的是:Android:语言支持,微调选项

String searchtypeval=searchtype.getSelectedItem().toString(); 

并加入searchtypeval到我的JSON。 的字符串数组中的微调是

<string-array name="search_options"> 
     <item>Starts With</item> 
     <item>Equals</item> 
     <item>Ends With</item> 
     <item>Contains</item> 
    </string-array> 

但现在我添加语言支持,以便在values-fr/strings.xml字符串数组对于微调是

<string-array name="search_options"> 
    <item>Commence par </item> 
    <item>Égal </item> 
    <item>Se termine par </item> 
    <item>Contient </item> 
</string-array> 

现在,如果用户选择等于在法国, 伊盖尔存储到这当然服务器不接受JSON。有没有什么办法可以使法国和英国strings.xml之间的连接?我现在所能想到的只是使用searchtype.getSelectedItemPosition() 并将值硬编码为String searchtypeval,因为我知道哪个选项是哪个位置,但这看起来很麻烦,有没有解决这个问题的方法更优雅?

+0

通过位置比较是最好的选择,另一种选择是从服务器获取search_options名单,取决于语言用户选择。 – user2450263

+0

可能发送一个整数到服务器而不是一个字符串 – todd

+0

@todd我不能在服务器端做任何改变,必须发送英文字符串 –

回答

2

您可以发送到所选元素的服务器指标,但这并不是一个好办法,指数的原因尚不informated。更好的方法是将可读的字符串密钥发送到服务器。请看下面的代码:

1)创建文件nontranslatable_string.xmlRES /值

<resources> 

<string-array name="search_options_keys"> 
     <item>Starts With</item> 
     <item>Equals</item> 
     <item>Ends With</item> 
     <item>Contains</item> 
    </string-array> 

</resources> 

2)创建Item类像SpinnerItem

public class SpinnerItem { 

public final String key; 
public final String value; 

private SpinnerItem(String key, String value) { 
    this.key = key; 
    this.value = value; 
} 

public static SpinnerItem create(String key, String value) { 
    return new SpinnerItem(key, value); 
} 

@Override 
public String toString() { 
    return value; 
} 

} 

3)与价值观填补你的适配器

String[] keys = context.getResources().getStringArray(R.id.search_options_keys); 
    String[] values = context.getResources().getStringArray(R.id.search_options); 

    List<SpinnerItem> items = new ArrayList<SpinnerItem>(); 

    for (int i = 0; i < keys.length; i++) { 
    items.add(SpinnerItem.create(keys[i], values[i])); 
    } 

    spinner.setAdapter(new ArrayAdapter<SpinnerItem>(context, android.R.layout.simple_spinner_item, android.R.id.text1, items)); 

4)选择你的价值

String valueForSendingToServer = ((SpinnerItem) spinner.getSelectedItem()).key; 

UPDATE

或者你也可以用另一种方式,为你使用任何地点获取neccessary值:

 Configuration config = context.getResources().getConfiguration(); 

     // Save originla location 
     Locale originalLocal = config.locale; 

     // Set new one for single using 
     config.locale = new Locale("en"); 
     context.getResources().updateConfiguration(config, null); 

     // Get search_options array for english values 
     String[] searchOptionsEn = getResources().getStringArray(R.array.search_options); 

     // Set previous location back 
     config.locale = originalLocal; 
     getResources().updateConfiguration(config, null); 

     String valueForSendingToServer = searchOptionsEn[spinner.getSelectedItemPosition()]; 
+0

谢谢,更新位是我一直在寻找的东西 –

0

您可以参考串用于本地化的字符串数组中的资源。

<string-array name="search_options"> 
    <item>@string/starts_with</item> 
    <item>@string/equals</item> 
    <item>@string/ends_with</item> 
</string-array> 

,然后在RES /值/ strings.xml中

<string name="starts_with">Starts with </string> 

RES /值-FR/string.xml

<string name="starts_with">Commence par </string>