2014-04-22 3 views
0

나는 Android 앱을 작업 중이며 페르시아어로 번역하려고합니다. 프로젝트의 모든 String 값은 XML 파일에 저장됩니다. 일부 String 값은 레이아웃 파일과 일부 클래스 (R.String)에 사용됩니다. Android에 페르시아어 텍스트를 사용하는 경우 제대로 표시 되려면 모양을 바꿔야합니다.android reshape 모든 리소스 파일 문자열

모든 String 값에 대해 reshape 메서드를 호출하지 않고 모든 리소스 String 값을 변경하고 싶습니다.

아무에게도 어떻게 설명 할 수 있습니까?

일부 아이디어 :
재정의 String 클래스

답변

1

Android 이미 기능 (well documented)를 제공
재정의 getResource 클래스는 다국어 응용 프로그램을 가지고 있습니다. 텍스트를 대체하고 각 언어에 대해 앱의 전체 버전을 사용하는 대신 프레임 워크 기능을 사용하는 것이 좋습니다. 이 경우 응용 프로그램은 장치 로캘 설정에 따라 제공 한 사용 가능한 언어에서 적합한 언어를 선택합니다. ,

영어 (기본 로케일) : 예

MyProject/ 
    res/ 
     values/ 
      strings.xml 
     values-fa/ 
      strings.xml 

을 한 다음은 파일로 String 값을 입력 :

그래서 기본적으로 당신은 (위 링크) 필요한 디렉토리 구조를 작성하여 시작할 것 /values/strings.xml :

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="title">My Application</string> 
    <string name="hello_world">Hello World!</string> 
</resources> 

페르시아어, /values-fa/strings.xml :

,515,
<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="title">...</string> 
    <string name="hello_world">...</string> 
</resources> 

해결
모양 변경 기능하므로 XML 레이아웃 문자열을 설정 모든 파르 String 값을 사용하는 언어 reshape farsi 대 (위 링크에서 인용하도록하는) 것은 불가능 (AFAIK)이므로 다음 제안은 모든 String 값이 프로그래밍 방식으로 설정된다고 가정합니다. 1

public static final String getLocalizedString(int resId) { 
    if(Locale.getDefault().toString().equals("fa_IR")) { 
     return PersianReshape.reshape(getResources().getString(resId)); 
    }else{ 
     return getResources().getString(resId); 
} 

이제 (각 선두로부터 변경해야)를 String를로드하기 위해이 기능을 사용할 수 있습니다 또는 예를 들어, 우선 글로벌 정적 래퍼 함수 번호를 사용

getRessource 메소드 나는 개인적으로 # 2 각 사용 UI 위젯) 정적 함수를 사용하는 대신 때문에 최우선의 setText (와 사용자 정의 클래스를 생성 String가 아닌 다른 유형의 자원을로드, 부작용 등

에 대한 가능한 다른 문제의 오버라이드 (override) 선호
또 다른 가능성은 표시 할 때 PersianReshape.reshape()을 호출하는 사용자 정의 UI 위젯을 만드는 것입니다. 예 :EditText에 대한 :

class CustomTextField extends EditText { 
    @Override 
    public void setText(String text) { 
     super.setText(PersianReshape.reshape(text)); 
    } 
} 
[...] 
CustomTextField myTextBox = new CustomTextField(); 
myTextBox.setText("...."); 
+0

감사의 알렉스, 프로젝트 페르시아어 문자열을 사용할 때마다 호출 reshaping.reshape 방법의 값-FA 자원 디렉토리,하지만 문제가 있습니다. – Micle

+0

귀하의 문제를 이해하는 것이 확실하지 않습니다. String hello = getResources()와 같은 것을 사용합니다. getString (R.string.hello_world); 문자열을 얻고 원하는 alnguage에서 항상 문자열을 얻지 않습니까? – alex

+0

예, PersianReshape.reshape (getResources(). getString (R.string.hello_world)); PersianReshape.reshape는 매번 페르시아 문자열로 호출합니다. – Micle