2014-06-10 2 views
2

사용자가 "포함", "다음으로 끝내기"또는 "같음"으로 검색할지 여부를 사용자가 선택하는 스피너가 있습니다. 옵션 선택 항목이 다른 정보가있는 json과 결과를 검색하기 위해 서버로 전송됩니다. 지금 나는 다음을 사용하고있다 :Android : 언어 지원, 스피너 옵션

그리고 나의 json에 searchtypeval을 더한다. 회 전자의 문자열 배열이

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

이제 사용자가 선택하면 프랑스어로 동일하므로, Egal은 물론 서버가 허용하지 않는 JSON에 저장됩니다. 프랑스와 영어를 연결할 수있는 방법이 있습니까 strings.xml? 지금 내가 생각할 수있는 것은 어느 옵션이 어떤 위치인지 알기 때문에 searchtype.getSelectedItemPosition() 을 사용하고 값을 String searchtypeval으로 하드 코딩하는 것입니다.하지만이 방법은 매우 복잡합니다.이 방법은 더 멋지게이 문제를 해결할 수있는 방법이 있습니까?

+0

위치하여 비교

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

하고 입술/값/strings.xml의

가장 좋은 방법은 사용자가 선택한 언어에 따라 서버에서 search_options 목록을 가져 오는 것입니다. – user2450263

+0

문자열 대신 서버에 정수를 전송할 수 있습니다. – todd

+0

@todd 서버 측에서 변경할 수 없으며 영어 문자열을 보내야합니다. –

답변

2

선택한 요소의 서버 인덱스로 보낼 수 있지만 좋은 방법은 아닙니다. 색인의 원인을 알 수 없습니다. 더 좋은 방법은 읽을 수있는 문자열 키를 서버에 보내는 것입니다. 다음 코드를 참조하십시오)

<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 값/

1) 만들 고해상도의 파일 nontranslatable_string.xml처럼 항목 클래스를 생성 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) 어댑터에 값을 입력하십시오.

,210

4)

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

UPDATE 당신의 가치 선택하거나 다른 방법을 사용하고 사용하는 위치이 켜지지 가치를 얻을 수 있습니다

 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 name="starts_with">Starts with </string> 

에서 입술/값-FR/string.xml :

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