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("....");
감사의 알렉스, 프로젝트 페르시아어 문자열을 사용할 때마다 호출 reshaping.reshape 방법의 값-FA 자원 디렉토리,하지만 문제가 있습니다. – Micle
귀하의 문제를 이해하는 것이 확실하지 않습니다. String hello = getResources()와 같은 것을 사용합니다. getString (R.string.hello_world); 문자열을 얻고 원하는 alnguage에서 항상 문자열을 얻지 않습니까? – alex
예, PersianReshape.reshape (getResources(). getString (R.string.hello_world)); PersianReshape.reshape는 매번 페르시아 문자열로 호출합니다. – Micle