2014-06-10 86 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>